Symfonyob娱乐下载 3.4新增功能:在内核中定义编译器传递
10月4日·发表的哈维尔Eguiluz
警告:这篇文章是关于一个不受支持的Symfony版本。ob娱乐下载有些信息可能已经过时了。阅读最新的Symfony文档ob娱乐下载.
提供的
尼古拉斯Grekas
在# 24257.
在Syob娱乐下载mfony 3.4中,应用程序内核可以订阅事件通过执行EventSubscriberInterface
并添加处理事件的方法。考虑到Symfony ob娱乐下载4将推出无捆绑的应用程序,在Symfony 3.4中,我们改进了应用程序内核以允许定义编译器在里面。
为此,内核必须实现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 27
/ / 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= >$标签) {/ /……}}}
内核中定义的编译器传递为类型PassConfig: TYPE_BEFORE_OPTIMIZATION
并且具有优先级-10000年
.
发表在#生活在边缘
评论
尼古拉斯Grekas
2017年10月5日在09:29
这个process()方法通常在所有bundle加载它们的配置并运行它们自己的编译器通道之后调用。这意味着这提供了*更改*任何服务定义的机会。一个实际的例子是在“测试”环境中,将一些私有服务转换为公共服务,以便在测试用例中模拟它们。
当然,只有在需要访问完全配置的容器时才应该使用这种方法(就像所有编译器传递一样)。对于更常见的需求,应该像往常一样进行配置。
当然,只有在需要访问完全配置的容器时才应该使用这种方法(就像所有编译器传递一样)。对于更常见的需求,应该像往常一样进行配置。
评论截止。
为了确保评论保持相关性,旧帖子将被关闭。
Tristan Maindron is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now