Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在细枝模板文件中定义全局变量?_Php_Variables_Twig_Global_Templating - Fatal编程技术网

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 }}