当使用Extension类时,在Symfony中使用Compiler Passes?

时间:2016-02-07 20:19:00

标签: symfony

在Symfony中使用编译器传递有什么意义?

何时应该使用Extension类,何时编译器在Symfony中传递?

1 个答案:

答案 0 :(得分:3)

他们提供服务定义。

通过创建编译器传递,您可以更新传递给服务的参数。

最常使用标记服务。

此外,它可用于:

  • 在定义之前创建需要有关其他已定义服务的信息的新服务。

  • 将参数交换或添加到您未编写的服务中。

  • 在容器中创建和修改参数。

我使用编译器传递来注册Factory,这使我能够覆盖doctrine Repository。

您可以查看代码以更好地理解其工作原理:

https://gist.github.com/chalasr/77be8eee5e3ecd3c06ec

<强>更新

感谢@Sruj,我添加了我忘记Extension

的部分

Extension也是依赖注入的一部分,尤其是配置 它的主要作用是跨应用程序包加载服务配置。

您可以使用imports手动加载配置,而不是为您创建扩展程序。您的所有服务配置都是从您的捆绑包中注册的,并在整个应用程序中共享。

在应用配置中注册供应商时,将调用供应商的服务容器扩展。

请参阅文档的"Importing configuration via container extensions"部分