在扩展分支的声明中,public和标签的含义是什么?


What is the meaning of public and tags at the declaration of extension Twig?

声明扩展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模板文件中使用。