Symfony-service-container
Symfony-サービスコンテナー
どのアプリケーションでも、オブジェクトはアプリケーションの成長とともに増加する傾向があります。 オブジェクトが増加すると、オブジェクト間の依存関係も増加します。 アプリケーションの成功には、オブジェクトの依存関係を適切に処理する必要があります。
コンポーネントの章で説明したように、Symfonyはオブジェクトの依存関係を処理するための簡単で効率的なコンポーネント DependencyInjection を提供します。 サービスコンテナは、適切に解決された依存関係を持つオブジェクトのコンテナです。 この章では、DependencyInjectionコンポーネントの使用方法を学びましょう。
Greeterクラスの完全なコードは次のとおりです。
次に、Greeterクラスをサービスコンテナに追加しましょう。 Symfonyは、新しいコンテナを作成する ContainerBuilder を提供します。 コンテナが作成されると、コンテナのregisterメソッドを使用してGreeterクラスをコンテナに登録できます。
ここでは、静的な引数を使用して、あいさつ文Hiを指定しています。 symfonyはパラメーターの動的設定も提供します。 動的パラメータを使用するには、名前を選択し、%の間で指定する必要があります。パラメータは、コンテナの setParameter メソッドを使用して設定できます。
適切な設定でGreeterクラスを登録しました。 これで、コンテナ get メソッドを使用して、適切に設定されたGreeterオブジェクトを提供するようにコンテナに要求できます。
Greeterクラスをコンテナに正常に登録し、コンテナから取得して使用しました。 ここで、Greeterクラスを使用する別のクラス User を作成し、それを登録する方法を見てみましょう。
Userクラスは、セッターメソッドの1つである setGreeter を使用して_Greeter_クラスを取得します。 このシナリオのために、Symfonyはメソッド addMethodCall とクラス Reference を提供して、次のコードに示すように別のクラスを参照します。
最後に、 Greeter と User の2つのクラスを登録しました。 これで、次のコードに示すように、適切に設定されたGreeterクラスを持つUserオブジェクトをコンテナから安全にフェッチできます。
PHP自体を使用してコンテナー内のオブジェクトを構成する方法を見てきました。 symfonyは他のメカニズムも提供します。 これらはXMLおよびYAML構成ファイルです。 YAMLを使用してコンテナーを構成する方法を見てみましょう。 そのためには、* symfony/configencyおよび symfony/yaml コンポーネントと symfony/dependency-injection コンポーネントをインストールします。
YAML設定は、 services.yml という別のファイルに書き込まれます。 YAML設定は、 parameters と services の2つのセクションで構成されています。 パラメーターセクションでは、すべての必須パラメーターを定義します。 サービスセクションはすべてのオブジェクトを定義します。 サービスセクションは、さらに class、arguments 、 calls という複数のセクションに分かれています。 クラスは、実際のクラスを指定します。 引数は、コンストラクターの引数を指定します。 最後に、呼び出しはセッターメソッドを指定します。 @記号@greeterを使用して別のクラスを参照できます。
これで、次のコードに示すように、 FileLoader および YamlFileLoader を使用して services.yml をロードおよび構成できます。
完全なコードリストは次のとおりです。
main.php
services.yml
symfony Webフレームワークは、依存性注入コンポーネントを広範囲に使用します。 すべてのコンポーネントは、集中化されたサービスコンテナによってバインドされます。 symfonyのWebフレームワークは、コンテナを container プロパティを介してすべての Controller で公開します。 ロガー、メーラーなど、その中に登録されているすべてのオブジェクトを取得できます。
コンテナに登録されているオブジェクトを見つけるには、次のコマンドを使用します。
インストールの章で作成された hello Webアプリには、約200以上のオブジェクトがあります。