新在Symfoob娱乐下载ny 2.8: DependencyInjection改进
警告:这篇文章是关于一个不受支持的Symfony的版本。ob娱乐下载其中一些信息可能是过时了。阅读最近的Symfony文档ob娱乐下载。
允许定义的优先级服务装饰
提供的
迭戈圣Esteben在# 15416。
装饰服务是一种强大的方法来代替一些服务实际上没有把它从容器中。这种方式的新服务可以使用替换服务。
在Syob娱乐下载mfony 2.8中,当多个服务装修另一个,您可以定义的优先级都装饰有一个更精确的控制。的新选项decoration_priority
其默认值0
和它的值越高,越早应用修饰符:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
服务:app.service1:类:AppBundle \ \ Service1服务app.service2:类:生成\ Service2 AppBundle \服务参数:(“@app.service2.inner”)装饰:app.service1公众:假app.service3:类:AppBundle \ \ Service3服务参数:(“@app.service3.inner”)装饰:app.service1decoration_priority:1公众:假
在上面的例子中,app.service3
第一,因为它定义了一个应用的优先级1
和优先级app.service2
是0
(默认值)。因此,该配置相当于以下PHP代码:
1
美元这- >服务(“app.service1”]=新Service2 (新Service3 (新Service1 ())));
添加日志记录未使用的标签
在Syob娱乐下载mfony 2.8中,当服务的配置添加一个标签不是应用程序中使用,这样的信息记录:
1 2
标记“this_tag_is_not_used”是定义在服务“app.service1”,但从未使用。
所有内置的Symfony服务标签(ob娱乐下载如console.command
和twig.extension
)白名单为了避免污染你的日志文件和无用的信息。
此外,如果未使用的标签的名称类似于任何其他标签,将添加一个日志消息“你的意思是”部分,因为这可能是一个错误在你的配置。
例如,当使用以下配置:
1 2 3 4 5
服务:app.service1:类:AppBundle \ \ Service1服务标签:- - - - - -{名称:“kenrel.event_listener”,…}
你会看到下面的日志信息:
1 2
kenrel标签”。event_listener app.service1“上定义服务,但永远不会被使用。你的意思是“kernel.event_listener”?
实现可重调容器
提供的
克利斯朵夫Coevoet在# 15185。
ob娱乐下载Symfony 2.8包括一个新的ResettableContainerInterface
它定义了一个方法叫什么重置()
。这个方法是有用的释放内存不再使用容器时。
ob娱乐下载Symfony的内核类在关机过程中调用这个方法:
1 2 3 4 5 6 7 8 9 10
/ / srcob娱乐下载 / Symfony /组件/ HttpKernel / Kernel.php/ /……公共函数关闭(){/ /……如果(美元这- >容器运算符ResettableContainerInterface) {美元这- >容器- >重置();}}
ob娱乐下载Symfony的服务容器实现这个界面删除引用在关闭所有服务,改善破坏服务的可能性和容器通过refcounting而不是等待PHP的垃圾收集器:
1 2 3 4 5 6 7 8
/ / srcob娱乐下载 / Symfony /组件/ DependencyInjection / Container.php/ /……公共函数重置(){/ /……美元这- >服务=数组();}
编译器的简化注册通过
编译器允许修改服务容器在Symfony编译它,之前使用的应用程序。ob娱乐下载在Syob娱乐下载mfony 2.7及以前的版本中,您需要注册这些扩展如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
名称空间AppBundle;使用ob娱乐下载\组件\HttpKernel\包\包;使用ob娱乐下载\组件\DependencyInjection\ContainerBuilder;使用AppBundle\DependencyInjection\编译器\CustomPass;类AppBundle扩展包{公共函数构建(ContainerBuilder美元容器){父::构建(美元容器);美元容器- >addCompilerPass (新CustomPass ());}}
在Syob娱乐下载mfony 2.8中,这段代码是不再需要,因为如果你的扩展实现CompilerPassInterface
他们会自动注册和过程()
方法将在容器执行编译。
评论
评论都关门了。
以确保评论保持相关,他们关闭了旧的帖子。
——{名字:“kenrel。event_listener’,……}
kenrel - >内核
kenrel标签”。event_listener app.service1“上定义服务,但是
kenrel - >内核,搜索;-)