重要な概念:
debug:container
debug:config
バンドルは、単一の機能を実装するファイル(PHP、CSS、JavaScript、画像)を含むディレクトリです。 Symfony2では、ほとんどすべてがバンドルです。 バンドルを作成する場合(手動で、またはに拡張され、バンドルがに登録されます。 オプションの(
フォルダー内)は、バンドルの構成を読み込み、管理します。php app/console generate:bundle
バンドル構成の読み込み(イージーウェイ):BundleNameBundle.php
SymfonyComponentHttpKernelBundleBundle
AppKernel::registerBundles()
最もシンプルなアプローチは、BundleNameExtension.php
内でパラメーターとサービスを直接構成します。機能的ですが、これはバンドルをアプリケーションにしっかりと結合し、携帯性を制限します。 より良い(まだ理想的ではありませんが)代替手段は、バンドル内に個別の構成ファイル(例えばDependencyInjection
)を作成し、メイン構成ファイルにインポートすることです。
バンドル構成の読み込み(セマンティックウェイ):
BundleNameExtension.php
クラスは構成の読み込みを処理します。 Configuration.php
からのバンドル関連構成の検証と処理には、DependencyInjection
クラス(app/config/
)を使用します。 拡張機能は、ローダー(例:Resources/config/
)を使用してバンドル固有の構成(YamlFileLoader
から)をロードします。 ここで定義されているサービスは、メインアプリケーション構成のパラメーターを使用できます。 このアプローチは、再利用可能な分散型バンドルを作成するのに特に役立ちます。
構成ファイル構造:
構成ファイルには、主にパラメーターとサービスが含まれています。
パラメーター:静的値(資格情報、APIキー、URL)。 キーの下で定義されています。 ベストプラクティスは、サービスクラス名をより良い拡張性のパラメーターとして定義することです。
parameters
例
services.yml
imports: - { resource: parameters.yml } - { resource: security.yml } - { resource: ../../src/Cvuorinen/ExampleBundle/Resources/config/services.yml }
app/console container:debug
コントローラーでサービスを使用する:
a SimpleService:
サービスを使用したコントローラー:Greeter
parameters: cvuorinen_example.greeter.class: Cvuorinen\ExampleBundle\Service\Greeter cvuorinen_example.greeter.greeting: "Hello" services: cvuorinen_example.greeter: class: %cvuorinen_example.greeter.class% arguments: [%cvuorinen_example.greeter.greeting%]
依存関係注射:
namespace Cvuorinen\ExampleBundle\Service; class Greeter { public function greet($name) { return "Hello $name"; } }
上記の例は、基本的なコンストラクターの注入を示しています。 Symfonyは、SetterとProperty Injectionもサポートしています。 サービスは、アクセシビリティを制限するためにプライベートと宣言できます。 工場はサービスを作成するために使用できます(たとえば、Doctrine Entity Managerを使用してリポジトリを作成します)。 結論:
これは、Symfonyバンドルの構成と依存関係のインジェクションの包括的な概要を提供します。 高度なトピック(オーバーライド構成、パラメーター共有、サービスとしてコントローラーの定義)のさらなる調査が奨励されます。 詳細については、公式のSymfonyドキュメントを参照してください。 ゆるいカップリングを維持するために、サービスコンテナ自体をサービスに注入しないでください。 上記の詳細な説明を考えると、FAQSセクションは省略されています。
以上がSymfonyバンドル構成とサービスコンテナの理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。