>本文探討了Symfony2捆綁配置及其與依賴項注入容器的相互作用。 這些概念對於新來者,尤其是那些不熟悉依賴注入的概念可能具有挑戰性。 儘管Symfony支持XML和PHP數組,但此處使用YAML的示例。 選擇取決於偏好。沒有單個“最佳”選項。
密鑰概念:
debug:container
>和debug:config
之類的控制台命令來對服務註冊和配置進行故障。 捆綁創建:
捆綁包是包含文件(PHP,CSS,JavaScript,Images)的目錄,實現了一個功能。 在Symfony2中,幾乎所有內容都是一捆。 當創建捆綁包(手動或使用php app/console generate:bundle
)時,BundleNameBundle.php
文件至關重要。 它的類擴展SymfonyComponentHttpKernelBundleBundle
,並在AppKernel::registerBundles()
中註冊捆綁包。 可選的BundleNameExtension.php
(在DependencyInjection
文件夾中)加載並管理捆綁包的配置。
>加載捆綁式配置(簡單的方式):
>最簡單的方法直接在app/config/config.yml
中直接配置參數和服務。在功能上,這將捆綁包與應用程序緊密地耦合,從而限制可移植性。 一個更好(儘管仍然不太理想)的替代方法是在捆綁包中創建一個單獨的配置文件(例如,Resources/config/services.yml
),然後將其導入到主配置文件中:
imports: - { resource: parameters.yml } - { resource: security.yml } - { resource: ../../src/Cvuorinen/ExampleBundle/Resources/config/services.yml }
>加載束配置(語義方式):>
BundleNameExtension.php
類處理配置加載。它使用Configuration.php
類(也在DependencyInjection
中)來驗證和處理app/config/
的捆綁相關配置。 然後,該擴展名使用加載程序(例如,Resources/config/
)加載束特異性配置(來自YamlFileLoader
)。 此處定義的服務可以使用主要應用程序配置中的參數。 這種方法對於創建可重複使用的,可分發的捆綁包特別有用。
>配置文件結構:
>配置文件主要包含參數和服務。
>參數:parameters
>
服務:包含業務邏輯的類。 在配置文件利用依賴性注入中定義它們。
:services.yml
imports: - { resource: parameters.yml } - { resource: security.yml } - { resource: ../../src/Cvuorinen/ExampleBundle/Resources/config/services.yml }
測試和調試配置。 app/console container:debug
>
在控制器中使用服務:
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還支持設定器和財產注入。 可以將服務宣佈為私人以限制其可訪問性。 工廠可用於創建服務(例如,使用Doctrine Entity Manager創建存儲庫)。
結論:>這提供了符號束配置和依賴注入的全面概述。 鼓勵進一步探索高級主題(覆蓋配置,參數共享,將控制器定義為服務)。 請記住要查閱官方的Symfony文檔以獲取詳細信息。 避免將服務容器本身注入服務,以保持寬鬆的耦合。 考慮到上面的詳細說明,省略了常見問題解答部分。
>
以上是了解Symfony Bundle配置和服務容器的詳細內容。更多資訊請關注PHP中文網其他相關文章!