声明扩展Twig时public和tags的含义是什么?
http://symfony.com/doc/current/cookbook/templating/twig_extension.html register-an-extension-as-a-service
# app/config/services.yml
services:
app.twig_extension:
class: AppBundle'Twig'AppExtension
public: false
tags:
- { name: twig.extension }
什么是公共和标签?我能用它做什么?
在Symfony文档中将服务标记为公共/私有:
基本上私有服务只能被注入到其他服务中。例如,您将无法在控制器操作中获取服务。私有服务的特殊之处在于,如果它们只被注入一旦它们从服务转换为内联实例化(例如。新PrivateThing())。这将提高容器的性能。
既然服务是私有的,那么您就不应该获取该服务直接来自容器:
$container->get('app.twig_extension'); // would fail
附加信息:
标记仅用于在编译服务容器之前对相同类型的服务进行分组和操作。就是这样,没什么特别的。这里有一些非常有用的帖子:
- Symfony2服务容器:如何让你的服务使用标签(这篇文章已经包含在下面给出的官方文档中) <
- DependencyInjection组件/gh>
例如,如果你创建自己的类(通过扩展基本的Twig_Extension
类),将其声明为服务并标记为twig.extension
并清除缓存(与预热),Twig编译器传递类(TwigEnvironmentPass
类)会自动注册它并识别它,就像它自己的扩展一样,你可以在你的Twig模板文件中使用。