【问题标题】:Is a global variable for a Twig template available inside a Symfony2 controller?Symfony2 控制器中是否有用于 Twig 模板的全局变量?
【发布时间】:2012-06-14 13:03:31
【问题描述】:

Twig 模板全局变量可以在Symfony2应用程序的config.yml中定义如下:

twig:                 
    globals:
      var_name: var_value

因此,在每个 Twig 模板中,变量可以按如下方式使用:

{{var_name}}

会显示

var_value

你知道在 Symfony2 控制器中获取全局变量值的方法吗?

【问题讨论】:

    标签: symfony global-variables twig


    【解决方案1】:

    似乎没有办法获取特定值。但是您可以从 twig 服务中获取完整的全局变量数组,然后获取它的偏移量。

    $twig = $this->container->get('twig');
    $globals = $twig->getGlobals();
    echo $globals['var_name'];
    

    【讨论】:

    • 谢谢,这很有趣。
    • 在 symfony 4.4 中执行此操作时会收到警告:“方法 'getGlobals' 被标记为 @internal”
    【解决方案2】:

    正确的做法是遵循Symfony's Cookbook中关于Twig全局变量的官方教程。在实践中,应该定义一个可以在控制器中使用的全局变量,例如:

      ; app/config/parameters.ini
      [parameters]
         my_global_var: HiAll
    

    然后将变量定义为 Twig 模板的全局变量

    # app/config/config.yml
    twig:
        globals:
            my_var: %my_global_var%
    

    因此,{{my_var}} 将返回 HiAll,但应在 parameters.ini 文件中处理一次该值。

    所以,这个问题的答案是否定的!或者准确地说,不是以一种有效的方式。 MDrollette 画了一个可能的方法!

    【讨论】:

    • 我更喜欢这个解决方案,因为它还允许将参数注入到容器感知类中。该参数仍然可以直接定义到 config.yml 中
    【解决方案3】:

    我不清楚您是想访问控制器中的 twig var,还是只从配置中访问全局 var。以下是如何从配置文件访问全局变量...

    您可以将值放在配置的参数部分中..

    parameters:
        var_name: some_value
    

    现在您可以从控制器访问它...

    $value = $this->container->getParameter('var_name');
    

    【讨论】:

    • 感谢您的回答。问题与为 Twig 模板定义的全局变量有关!它们也可以在 Controller 中访问,还是只能在 Twig 模板中使用?
    • Symfony official guide 声明可以使用 parameters.ini 文件,但没有回答我的问题。
    【解决方案4】:

    我认为您最好使用捆绑配置或 DIC 参数作为您的值,然后将其添加到 twig 全局变量中(例如,通过您的捆绑扩展类),而不是试图做相反的事情。

    【讨论】:

    • 那么,答案是“不,不可能”吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 2016-08-20
    相关资源
    最近更新 更多