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

发布于 2024-12-13 18:13:40 字数 138 浏览 0 评论 0原文

现在我可以标记服务,例如: 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

风筝在阴天搁浅。 2024-12-20 18:13:40

好的,我找到了答案,基本上标签是由实现 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 method build)

CompilerPass have method process witch receives ContainerBuilder 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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文