簡體   English   中英

如何在樹枝模板文件中定義全局變量?

[英]How can I define global variables inside a twig template file?

是否可以在 twig 文件中設置全局變量,以便我可以從其他文件、宏和塊中訪問該變量。

例如,我想要variables.twig文件並在其中設置我的變量,然后我可以將它包含在其他模板中。

我知道可以從框架(例如 Symfony)設置全局變量,但我想要一個僅使用 twig 功能的解決方案。

使用 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 代碼時,您只包含來自該代碼的渲染視圖,而不是代碼本身。 因此,設計上不可能以您正在尋找的方式包含一組變量。

Symfony 4開始,您可以在config/packages/twig.yaml中設置全局變量。

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

似乎您可以在頂級模板中分配全局 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 }}

使用SlimFrameworkTwig-View:3.0

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM