如何使用编译器通行证吗
编辑该页面如何使用编译器通行证吗
编译器传递给你一个机会来操作服务定义已注册的服务容器。你可以阅读关于如何创建组件部分”编译的容器”。
编译器中注册build ()
方法应用程序的内核:
1 2 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和过程中的服务过程()
方法:
1 2 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 ()
方法的主要包类(这是实现时不需要过程()
方法扩展):
1 2 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 ());}}
如果您正在使用自定义服务标签在一个包然后按照惯例,标记名称包含包的名称(小写字母,下划线分隔符),紧随其后的是一个点,最后“真实”的名字。例如,如果你想介绍一些AcmeMailerBundle“运输”标签,你应该叫它acme_mailer.transport
。
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。