Php 如何在细枝模板文件中定义全局变量?
是否可以在细枝文件中设置全局变量,以便我可以从其他文件、宏和块访问这些变量 例如,我希望有Php 如何在细枝模板文件中定义全局变量?,php,variables,twig,global,templating,Php,Variables,Twig,Global,Templating,是否可以在细枝文件中设置全局变量,以便我可以从其他文件、宏和块访问这些变量 例如,我希望有variables.twig文件,并在其中设置我的变量,然后我可以将其包含在其他模板中 我知道可以从框架(例如Symfony)设置全局变量,但我想要一个仅使用twig功能的解决方案。使用Symfony2配置 如果您使用的是Symfony2,则可以在config.yml文件中设置全局变量: # app/config/config.yml twig: # ... globals:
variables.twig
文件,并在其中设置我的变量,然后我可以将其包含在其他模板中
我知道可以从框架(例如Symfony)设置全局变量,但我想要一个仅使用twig功能的解决方案。使用Symfony2配置
如果您使用的是Symfony2,则可以在config.yml
文件中设置全局变量:
# app/config/config.yml
twig:
# ...
globals:
myStuff: %someParam%
然后在应用程序中的任何位置使用{{myStuff}}
使用Twig_环境::addGlobal 如果在其他项目中使用Twig,则可以直接在环境中设置全局变量:
$twig = new Twig_Environment($loader);
$twig->addGlobal('myStuff', $someVariable);
然后在应用程序中的任何位置使用{{myStuff}}
使用细枝延伸 如果您有许多全局变量,并且只想为应用程序的特定部分指定一组全局变量,则可以创建一个细枝扩展:
class Some_Twig_Extension extends Twig_Extension implements Twig_Extension_GlobalsInterface
{
public function getGlobals()
{
return array(
'someStuff' => $this->myVar,
// ...
);
}
// ...
}
然后仅在需要时将其导入到您的环境中:
$twig = new Twig_Environment($loader);
$twig->addExtension(new Project_Twig_Extension());
并且仍然在应用程序中的任何位置使用{{myStuff}}
使用细枝模板
当包含一段细枝代码时,只包含来自该代码的渲染视图,而不是代码本身。因此,从设计上来说,不可能按照您所寻找的方式包含一组变量。由于Symfony 4,因此您可以在
config/packages/twig.yaml
中设置全局变量
# config/packages/twig.yaml
twig:
# ...
globals:
ga_tracking: 'UA-xxxxx-x'
似乎可以在顶级模板中分配全局只读变量,并在所有底层模板中使用它们。但是你当然不能忽略它们。 它涵盖了我的情况,也许会对其他人有用 base.html.twig 深枝
深入检查顶部变量:
{{myReadonlyJar.v2}
一个非常好、彻底的答案的可能重复,感谢您提供config.yml解决方案的替代方案@alain Tiemblo请注意:getGlobals()方法已被弃用。如果我使用第二种方法,是否设置一次,然后它像$\u会话一样在我的应用程序中持续存在,还是每次初始化细枝时都需要这样做?
<!DOCTYPE html>
{# assign global vars here #}
{% set myReadonlyJar = your_custom_ext_twig_function() %}
<html>
<body>
{% block body %}{% endblock %}
</body>
</html>
{% extends 'stack/base.html.twig' %}
{% block body %}
{{ myReadonlyJar.v1 }}
{{ myReadonlyJar.v2 }}
{{ include('stack/deep.twig') }}
{% endblock %}
Check top vars very deep inside: <br>
{{ myReadonlyJar.v2 }}