如何使用编译器通行证吗

编辑该页面

警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 5.3,不再维护。

这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。

如何使用编译器通行证吗

编译器传递给你一个机会来操作服务定义已注册的服务容器。你可以阅读关于如何创建组件部分”编译的容器”。

编译器中注册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;使用欧宝娱乐app下载地址\\FrameworkBundle\内核\MicroKernelTrait;使用欧宝娱乐app下载地址\组件\DependencyInjection\ContainerBuilder;使用欧宝娱乐app下载地址\组件\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名称空间应用程序;使用欧宝娱乐app下载地址\\FrameworkBundle\内核\MicroKernelTrait;使用欧宝娱乐app下载地址\组件\DependencyInjection\编译器\CompilerPassInterface;使用欧宝娱乐app下载地址\组件\DependencyInjection\ContainerBuilder;使用欧宝娱乐app下载地址\组件\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;使用欧宝娱乐app下载地址\组件\DependencyInjection\ContainerBuilder;使用欧宝娱乐app下载地址\组件\HttpKernel\\;MyBundle扩展{公共函数构建(ContainerBuilder美元容器):无效{::构建(美元容器);美元容器- >addCompilerPass (CustomPass ());}}

如果您正在使用自定义服务标签在一个包然后按照惯例,标记名称包含包的名称(小写字母,下划线分隔符),紧随其后的是一个点,最后“真实”的名字。例如,如果你想介绍一些AcmeMailerBundle“运输”标签,你应该叫它acme_mailer.transport

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。
欧宝娱乐app下载地址Symfony 5.3支持通过JoliCode