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


How to add own custom service container tags, and how to get tagged services in symfony2?

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

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

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

CompilerPass具有接收ContainerBuilder作为参数的方法process
ContainerBuilder有一个方法:findTaggedServiceIds,它可以用来获取标记的服务ID,并对它们执行任何您想要的操作。

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

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