什么时候使用 Extension 类,什么时候在 Symfony 中使用 Compiler Passes?

Sru*_*ons 6 symfony

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

我们什么时候应该使用扩展类,什么时候编译器通过 Symfony?

cha*_*asr 4

它们带有服务定义。

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

它通常是通过标记服务来完成的。

此外,它还可用于:

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

  • 交换或添加不是您编写的服务的参数。

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

我使用编译器传递来注册一个工厂,使我能够覆盖学说存储库。

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

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

更新

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

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

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

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

请参阅文档的“通过容器扩展导入配置”部分