如何添加自己的自定义服务容器标签,以及如何在 symfony2 中获取标记的服务?
现在我可以标记服务,例如: form.type
通知表单组件使用此服务作为表单类型。
我找不到任何相关文档,如何定义自己的标签?并获取带有它标记的所有服务?或者甚至将所有用我的标签服务标记的内容作为参数传递给另一个服务?
Now I can tag services eg: form.type
witch informs forms component to use this service as form type.
I can't find any documentation on this, how can I define my own tag? And get all services that are tagged with it? Or even pass all tagged with my tag services as a argument to another service?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
好的,我找到了答案,基本上标签是由实现
CompilerPassInterface
的类处理的,编译器传递对象可以添加到 Bunlde 文件中(例如:Symfony\Bundle\FrameworkBundle\FrameworkBundle
参见方法 < code>build)CompilerPass 有方法
process
接收ContainerBuilder
作为参数。ContainerBuilder 有方法:
findTaggedServiceIds
,可用于获取标记的服务 ID,并用它们做任何您想做的事情。要将结果传递给另一个服务,您必须为其定义空集合参数,并使用 ContainerBuilder 将此参数替换为找到的服务 ID。
例如:Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\FormPass
OK I found answer, basically tags are processed by classes that implements
CompilerPassInterface
compiler pass objects can be added in bunlde file (eg:Symfony\Bundle\FrameworkBundle\FrameworkBundle
see methodbuild
)CompilerPass have method
process
witch receivesContainerBuilder
as argument.ContainerBuilder has method:
findTaggedServiceIds
, witch can be used to get tagged services IDs, and do whatever you want with them.To pass results to another service you have to define empty collection argument for it, and using ContainerBuilder replace this argument with found service IDs.
eg:
Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\FormPass