ホームページ >バックエンド開発 >PHPチュートリアル >【Laravel5基礎】25 – ビューパーシャルで常にデータを受信したい場合

【Laravel5基礎】25 – ビューパーシャルで常にデータを受信したい場合

WBOY
WBOYオリジナル
2016-06-23 13:05:231022ブラウズ

サービス コンテナ

はじめに

前のセクションでは、ラベルの選択をより合理的にするために、ラベルの選択にいくつかの最適化を行いました。このセクションでは、サービス コンテナーについて説明します。

手順

開発環境: Windows 7

Laravelバージョン: 5+

IDE: Phpstorm

セクション25では、たくさんのことについて話しましたが、サービスコンテナについてはまだ触れていません次はこれが何なのか教えてください。

サービス コンテナ

いわゆるサービス コンテナは、クラスの依存関係または依存関係の注入を管理するマネージャーです。 「依存性注入」とは何ですか? まず「依存性」について説明します。「依存性」関係を形成するには、参加者の数が 2 以上である必要があります。あるクラスは別のクラスを使用する可能性があります。つまり、依存が発生しました。「注射」とは英語で「注射」されますか?病院では、どんな病気になっても、何が必要でも、どのような種類の注射が必要か、どのような液体が必要か、すべてはあなた次第です。あなたの特定の状態や症状に応じて、これらの薬を体内に「注射」します。したがって、合計すると、「依存関係の注入」とは、この「依存関係」関係がいつ必要になり、いつ「注入」されるかを意味します。

特にプログラミングでは、依存関係の注入はコンストラクターまたはセッター メソッドを介してパラメーターを渡すことによって実現されます。

routes.php を開きます。ここにはすべてのルートが配置されています。ファイルにルートを追加します:

Route::get('bar',function(Bar $bar){    dd($bar);}); 

ある程度のプログラミング経験のある学生は、このクラスをまったく定義していないため、このルートでは bar クラスが見つからないことを知っており、実行時に必ずエラーが報告されます。 (テストする必要はありません。自分でテストできます。)

しかし、このルートに bar クラスを追加すると、状況は異なります:

class Bar{} 

私の Web ページに出力されるのは、「bar {# 143 }" は、$bar などのアドレスである必要があります。

しかし、次のステートメントのように、bar クラスのインスタンス化オブジェクトをクロージャー メソッドに明示的に提供していないことに気づきましたか:

$bar = new Bar(); 

しかし、Laravel はそのクラスを見つけることができます。

これは、PHP の中心的なメカニズムである「リフレクション」を通じてクラスを再帰的に検索し、サービス コンテナが自動的にクラスをバインドする機能です。

次に、自動と手動があります。手動でバインドしたい場合は、次のこともできます。

App::bind('Bar',function(){    return new Bar();}); 

上記のコードを追加した後、App クラス種類の静的メソッド binding() を介してバインドしました。冒頭で述べたように、あなたがバインドしなくても、Laravel がバインドしてくれます。

バインディングインターフェイス

実装する必要があるインターフェイスがある場合、この時点で、バインディングを通じてインターフェイスを実装したいクラスにインターフェイスをバインドできます。例:

interface BarInterface{}class Bar implements BarInterface{}Route::get('bar',function(BarInterface $bar){                dd($bar);}); 

現時点で、クラス Bar が BarInterface を実装していることをサービス コンテナにどのように知らせることができますか?以下を参照してください:

interface BarInterface{}class Bar implements BarInterface{}App:bind('BarInterface','Bar');Route::get('bar',function(BarInterface $bar){                dd($bar);}); 

または:

interface BarInterface{}class Bar implements BarInterface{}App:bind('BarInterface','Bar');Route::get('bar',function(){    $bar = App::make(['BarInterface']);    dd($bar);}); 

それはとても簡単です。

最初に戻る

私たちが Laravel ルーティングを学んでいたとき、チュートリアルで次のように教えられた理由をまだ覚えているでしょうか:

Route::get('/home', 'HomeController@index'); 

しかし、最初の Routes.php には次の式がありました 息子の:

Route::get('/', function () {        return view('welcome');    }); 

実際、それらの機能は同じですが、MVC の概念を反映するために、それぞれが独自の役割を実行し、独自のクラスで記述されているため、見た目はすっきりしています。

まとめ

今日の内容は実際に、Laravel の Service Container コンテナ、その目的と機能について説明したいと思います。リフレクション メカニズムに基づいてクラスを再帰的に検索します。必要に応じて手動または自動で実行できます。詳細については、公式ドキュメント「サービス コンテナ」を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:PHP評価の反映次の記事:PHP評価の反映