>本文探讨了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中文网其他相关文章!