现在我可以标记服务,例如:form.type
开关通知表单组件将此服务用作表单类型。
我找不到任何关于这方面的文档,我如何定义自己的标签?并获得所有标记的服务?或者甚至将所有标记了我的标记服务的参数传递给另一个服务?
好的,我找到了答案,基本上标签是由实现CompilerPassInterface
编译器的类处理的。对象可以添加到bunlde文件中(例如:Symfony'Bundle'FrameworkBundle'FrameworkBundle
请参阅方法build
(
CompilerPass具有接收ContainerBuilder
作为参数的方法process
ContainerBuilder有一个方法:findTaggedServiceIds
,它可以用来获取标记的服务ID,并对它们执行任何您想要的操作。
若要将结果传递给另一个服务,必须为其定义空的集合参数,并使用ContainerBuilder将此参数替换为找到的服务ID。
例如:Symfony'Bundle'FrameworkBundle'DependencyInjection'Compiler'FormPass