【问题标题】:How can I define global variables inside a twig template file?如何在树枝模板文件中定义全局变量?
【发布时间】:2015-05-11 13:48:15
【问题描述】:

是否可以在 twig 文件中设置全局变量,以便我可以从其他文件、宏和块中访问该变量。

例如,我想要variables.twig 文件并在其中设置我的变量,然后我可以将它包含在其他模板中。

我知道可以通过框架(例如 Symfony)设置全局变量,但我想要一个仅使用 twig 功能的解决方案。

【问题讨论】:

标签: php variables twig global templating


【解决方案1】:

使用 Symfony 配置

如果您使用 Symfony2+,您可以在 config.yml 文件中设置全局变量:

# app/config/config.yml
twig:
    # ...
    globals:
        myStuff: %someParam%

然后在应用程序的任何位置使用{{ myStuff }}。


使用 Twig_Environment::addGlobal

如果你在另一个项目中使用 Twig,你可以直接在环境中设置你的全局变量:

$twig = new Twig_Environment($loader);
$twig->addGlobal('myStuff', $someVariable);

然后在应用程序的任何位置使用{{ myStuff }}。


使用 Twig 模板

当您包含一段 Twig 代码时,您只包含来自该代码的渲染视图,而不是代码本身。因此,设计上不可能以您正在寻找的方式包含一组变量。

【讨论】:

  • 一个非常好的、彻底的答案,感谢您提供 config.yml 解决方案的替代方案! @alain-tiemblo
  • 请注意:getGlobals() 方法已被弃用。
  • 如果我使用第二种方法,我是否设置一次,它会像 $_SESSION 一样在我的应用程序中持续存在,还是每次初始化 twig 时都需要这样做?
  • 谢谢@David,我之前没有注意到你的评论。答案已编辑。
【解决方案2】:

从 Symfony 4 开始,您可以在 config/packages/twig.yaml 中设置全局变量。

# config/packages/twig.yaml
twig:
    # ...
    globals:
        ga_tracking: 'UA-xxxxx-x'

【讨论】:

    【解决方案3】:

    似乎您可以在顶级模板中分配全局 READONLY 变量,并在所有底层模板中使用它们。但是你当然不能覆盖它们。 它涵盖了我的情况,也许对其他人有用。

    base.html.twig

    <!DOCTYPE html>
    {# assign global vars here #}
    {% set myReadonlyJar = your_custom_ext_twig_function() %} 
    <html>
        <body>
            {% block body %}{% endblock %}
        </body>
    </html>
    

    my_page.twig

    {% extends 'stack/base.html.twig' %}
    
    {% block body %}
        {{ myReadonlyJar.v1 }}
    
        {{ myReadonlyJar.v2 }}
        {{ include('stack/deep.twig') }}
    {% endblock %}
    

    deep.twig

    Check top vars very deep inside: <br>
    {{ myReadonlyJar.v2 }}
    

    【讨论】:

      【解决方案4】:

      使用SlimFramework 和Twig-View:3.0

      可以使用以下方法Twig::offsetSet

      $twig = Twig::create('view/templates');
      $twig->offsetSet('globalVar', 'globalVarValue');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-14
        • 2011-11-11
        • 1970-01-01
        • 1970-01-01
        • 2010-11-05
        • 2013-08-07
        • 2013-05-11
        • 2012-07-27
        相关资源
        最近更新 更多