新在Symfo欧宝娱乐app下载地址ny 3.4:定义编译器通过在内核中
2017年10月4日·发表的哈维尔Eguiluz
警告:这篇文章是关于一个不受支持的Symfony的版本。欧宝娱乐app下载地址其中一些信息可能是过时了。阅读最近的Symfony文档欧宝娱乐app下载地址。
提供的
尼古拉斯Grekas
在# 24257。
在Sy欧宝娱乐app下载地址mfony 3.4中,应用内核可以订阅事件只有通过实现EventSubscriberInterface
和添加方法来处理事件。鉴于Symfony 4欧宝娱乐app下载地址将bundle-less应用程序,在Symfony 3.4我们也改善了应用程序内核允许定义编译器在里面。
为此,内核必须实现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日27
/ / 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= >美元标签){/ /……}}}
编译器通过在内核中定义的类型PassConfig: TYPE_BEFORE_OPTIMIZATION
和有一个优先级-10000年
。
发表在#生活在边缘
评论
尼古拉斯Grekas
说10月5日,2017年在09:29
这个过程()方法通常称为毕竟包加载配置,跑自己的编译器传递。这意味着这给机会*改变*任何服务定义。一个实际的例子将会在“测试”环境中,将一些私人服务公众,这样他们就可以在测试用例被嘲笑。
当然,这应该使用只有当访问完全配置容器是必需的(像所有编译器)。更多的共同需求,配置应该像往常一样。
当然,这应该使用只有当访问完全配置容器是必需的(像所有编译器)。更多的共同需求,配置应该像往常一样。
评论都关门了。
以确保评论保持相关,他们关闭了旧的帖子。
Tristan Maindron is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now