【发布时间】:2015-05-11 13:48:15
【问题描述】:
是否可以在 twig 文件中设置全局变量,以便我可以从其他文件、宏和块中访问该变量。
例如,我想要variables.twig 文件并在其中设置我的变量,然后我可以将它包含在其他模板中。
我知道可以通过框架(例如 Symfony)设置全局变量,但我想要一个仅使用 twig 功能的解决方案。
【问题讨论】:
标签: php variables twig global templating
是否可以在 twig 文件中设置全局变量,以便我可以从其他文件、宏和块中访问该变量。
例如,我想要variables.twig 文件并在其中设置我的变量,然后我可以将它包含在其他模板中。
我知道可以通过框架(例如 Symfony)设置全局变量,但我想要一个仅使用 twig 功能的解决方案。
【问题讨论】:
标签: php variables twig global templating
如果您使用 Symfony2+,您可以在 config.yml 文件中设置全局变量:
# app/config/config.yml
twig:
# ...
globals:
myStuff: %someParam%
然后在应用程序的任何位置使用{{ myStuff }}。
如果你在另一个项目中使用 Twig,你可以直接在环境中设置你的全局变量:
$twig = new Twig_Environment($loader);
$twig->addGlobal('myStuff', $someVariable);
然后在应用程序的任何位置使用{{ myStuff }}。
当您包含一段 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 }}
【讨论】:
使用SlimFramework 和Twig-View:3.0
可以使用以下方法Twig::offsetSet
$twig = Twig::create('view/templates');
$twig->offsetSet('globalVar', 'globalVarValue');
【讨论】: