如何使用编译器传递
编辑本页如何使用编译器传递
编译器传递给你一个操作其他的机会服务定义已经注册到服务容器的。你可以在组件部分阅读如何创建它们。编译容器".
类中注册编译器传递build ()
应用程序内核的方法:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/ / src / Kernel.php名称空间应用程序;使用应用程序\DependencyInjection\编译器\CustomPass;使用ob娱乐下载\包\FrameworkBundle\内核\MicroKernelTrait;使用ob娱乐下载\组件\DependencyInjection\ContainerBuilder;使用ob娱乐下载\组件\HttpKernel\内核作为BaseKernel;类内核扩展BaseKernel{使用MicroKernelTrait;/ /……受保护的函数构建(ContainerBuilder$容器):无效{$容器->addCompilerPass (新CustomPass ());}}
编译器传递最常见的用例之一是处理标记服务.在这些情况下,您可以让内核实现,而不是创建编译器通道CompilerPassInterface的内部处理服务过程()
方法:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
/ / src / Kernel.php名称空间应用程序;使用ob娱乐下载\包\FrameworkBundle\内核\MicroKernelTrait;使用ob娱乐下载\组件\DependencyInjection\编译器\CompilerPassInterface;使用ob娱乐下载\组件\DependencyInjection\ContainerBuilder;使用ob娱乐下载\组件\HttpKernel\内核作为BaseKernel;类内核扩展BaseKernel实现了CompilerPassInterface{使用MicroKernelTrait;/ /……公共函数过程(ContainerBuilder$容器):无效{//在这个方法中,你可以操作服务容器://例如,更改一些容器服务:$容器->getDefinition (“app.some_private_service”)->setPublic (真正的);//或处理带标签的服务:foreach($容器->findTaggedServiceIds (“some_tag”)作为$id= >$标签) {/ /……}}}
在包中使用编译器传递
包可以定义编译器传递在build ()
方法的初始化(在实现过程()
扩展中的方法):
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/ / src / MyBundle / MyBundle.php名称空间应用程序\MyBundle;使用应用程序\DependencyInjection\编译器\CustomPass;使用ob娱乐下载\组件\DependencyInjection\ContainerBuilder;使用ob娱乐下载\组件\HttpKernel\包\包;类MyBundle扩展包{公共函数构建(ContainerBuilder$容器):无效{父::构建($容器);$容器->addCompilerPass (新CustomPass ());}}
如果您使用自定义服务标签在一个bundle中,按照惯例,标记名由bundle的名称(小写,下划线作为分隔符),然后是一个点,最后是“真实”名称组成。例如,如果您想在AcmeMailerBundle中引入某种“传输”标记,您应该调用它acme_mailer.transport
.
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。