在 Symfony 中使用编译器传递有什么意义?
我们什么时候应该使用扩展类,什么时候编译器通过 Symfony?
它们带有服务定义。
通过创建编译器通道,您可以更新传递给服务的参数。
它通常是通过标记服务来完成的。
此外,它还可用于:
创建新服务,在定义之前需要有关其他已定义服务的信息。
交换或添加不是您编写的服务的参数。
在容器中创建和修改参数。
我使用编译器传递来注册一个工厂,使我能够覆盖学说存储库。
您可以查看代码以更好地理解其工作原理:
https://gist.github.com/chalasr/77be8eee5e3ecd3c06ec
更新
感谢@Sruj,我添加了我忘记的部分Extension
Extension也是依赖注入的一部分,尤其是配置的一部分。
它的主要作用是跨应用程序包加载服务配置。
imports您可以创建一个扩展来为您执行此操作,而不是使用手动加载配置。您的所有服务配置都从您的捆绑包中注册并在整个应用程序中共享。
当您在应用程序配置中注册供应商时,将调用该供应商的服务容器扩展。
请参阅文档的“通过容器扩展导入配置”部分