新在Symfo欧宝娱乐app下载地址ny 3.2:编译器通过改进
2016年7月1日·发表的哈维尔Eguiluz
警告:这篇文章是关于一个不受支持的Symfony的版本。欧宝娱乐app下载地址其中一些信息可能是过时了。阅读最近的Symfony文档欧宝娱乐app下载地址。
编译器Symfony提供的机制来处理服务定义容器时编译应用程序执行欧宝娱乐app下载地址之前。在Sy欧宝娱乐app下载地址mfony 3.2中我们介绍了一些新特性。
编译器通过优先级
容器的编译是一个复杂的过程,在执行几个步骤,称为“优化”(如解决服务引用)和“清除”(例如,删除未使用的服务)。
当注册一个编译器,您可以选择的步骤运行的第二个可选参数addCompilerPass ()
方法:
1 2
/ /……美元容器- >addCompilerPass (新PassConfig CustomPass ()::TYPE_AFTER_REMOVING);
然而,你不能选择编译器的执行顺序传递在每个步骤中,所以它们是在同一顺序执行发现Symfony。欧宝娱乐app下载地址在某些情况下这是不可接受的欧宝娱乐app下载地址Symfony 3.2编译器允许您设置的优先级。
优先级定义是第三的可选参数addCompilerPass ()
方法。默认的优先级是0
和它的值可以是任何正面或负面的整数。优先级越高,越早执行:
1 2
/ /……美元容器- >addCompilerPass (新PassConfig CustomPass ()::TYPE_AFTER_REMOVING,30.);
查找和排序服务标记
共同找到每个服务需要编译器标记与给定标签然后按优先级排列这些服务。欧宝娱乐app下载地址Symfony本身需要这个特性在几个部分的代码库,所以欧宝娱乐app下载地址Symfony 3.2添加了一种特征来发现和服务标记:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/ / Symfon欧宝娱乐app下载地址y 3.2之前类CustomPass实现了CompilerPassInterface{公共函数过程(ContainerBuilder美元容器){美元温暖=数组();foreach(美元容器- >findTaggedServiceIds (“kernel.cache_warmer”)作为美元id= >美元属性){美元优先级=收取(美元属性(0][“优先”])?美元属性(0][“优先”]:0;美元温暖(美元优先级][]=新引用(美元id);作用}:美元温暖);美元温暖=中的call_user_func_array (“array_merge”,美元温暖);/ /……}}
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/ /在Sy欧宝娱乐app下载地址mfony 3.2使用欧宝娱乐app下载地址\组件\DependencyInjection\编译器\PriorityTaggedServiceTrait;类CustomPass实现了CompilerPassInterface{使用PriorityTaggedServiceTrait;公共函数过程(ContainerBuilder美元容器){美元温暖=美元这- >findAndSortTaggedServices (“kernel.cache_warmer”,美元容器);/ /……}}
发表在#生活在边缘
评论
评论都关门了。
以确保评论保持相关,他们关闭了旧的帖子。
Javier Eguiluz is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now