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

时间:2011-11-04 17:45:19

标签: php symfony

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

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

1 个答案:

答案 0 :(得分:10)

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

CompilerPass让方法process接收ContainerBuilder作为参数 ContainerBuilder有方法:findTaggedServiceIds,可以用来获取标记的服务ID,并随意做任何事情。

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

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