如何添加自己的自定义服务容器标签,以及如何在symfony2中获取标记服务?

can*_*nni 6 php symfony

现在我可以标记服务,例如:form.type巫婆通知表单组件将此服务用作表单类型.

我找不到任何关于此的文档,如何定义自己的标签?并获得所有标记的服务?或者甚至将标记为我的标记服务的所有标记作为参数传递给另一个服务?

can*_*nni 10

好的我找到了答案,基本上标签是由实现CompilerPassInterface编译器传递对象的类处理的,可以在bunlde文件中添加(例如:Symfony\Bundle\FrameworkBundle\FrameworkBundle参见方法build)

CompilerPass有作为参数process接收的方法ContainerBuilder.
ContainerBuilder有方法:findTaggedServiceIds,witch可以用来获取标记的服务ID,并随心所欲地做任何事情.

要将结果传递给另一个服务,您必须为它定义空集合参数,并使用ContainerBuilder将此参数替换为找到的服务ID.

例如: Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\FormPass