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