Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.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
Symfony 2+;细枝全局变量_Symfony_Twig - Fatal编程技术网

Symfony 2+;细枝全局变量

Symfony 2+;细枝全局变量,symfony,twig,Symfony,Twig,在使用includes更改twig全局变量后,如何使其保持修改?虽然我得到了“原始设置”,但我想要的输出是“设置@更深” app/config/config.yml twig: globals: testvar: "original setting" root.html.twig {% include "MyBundle::levelone.html.twig" %} {{ testvar }} {% set testvar = "set @ levelone" %} {

在使用includes更改twig全局变量后,如何使其保持修改?虽然我得到了“原始设置”,但我想要的输出是“设置@更深”

app/config/config.yml

twig:
    globals:
      testvar: "original setting"
root.html.twig

{% include "MyBundle::levelone.html.twig" %}
{{ testvar }}
{% set testvar = "set @ levelone" %}
{% include "MyBundle::deeper.html.twig" %}
{% set testvar = "set @ deeper" %}
levelone.html.twig

{% include "MyBundle::levelone.html.twig" %}
{{ testvar }}
{% set testvar = "set @ levelone" %}
{% include "MyBundle::deeper.html.twig" %}
{% set testvar = "set @ deeper" %}
deeper.html.twig

{% include "MyBundle::levelone.html.twig" %}
{{ testvar }}
{% set testvar = "set @ levelone" %}
{% include "MyBundle::deeper.html.twig" %}
{% set testvar = "set @ deeper" %}

这是个有趣的问题,我不知道答案,但再多的玩弄积木之类的东西也没用。我查看了生成的php缓存模板文件。回显变量时,它看起来像:

// {{ testvar }}
echo twig_escape_filter($this->env, $this->getContext($context, "testvar"), "html", null, true);
基本上,它首先在本地上下文中查找testvar。如果未找到,则在全局上下文中查找

设置测试变量的值时,您会得到:

// {% set testvar = 'level one' }}
$context["testvar"] = "level one";
因此,只有本地上下文得到更新。当包含的模板返回时,更改的值将消失

所以默认情况下,至少看起来全局变量是只读的


可以通过扩展来实现这一点。我对内部的了解还不够

您是否尝试通过Twig定义全局变量?您可以在config.yml文件中执行以下操作:

twig:
    globals:
        my_global_var : myvalue
因此,模板中的
{{my\u global\u var}}
将打印
myvalue


有关更多信息,请阅读来自容器感知对象的。

$this->get('twig')->addGlobal('ThomasDecauxIsAwsome', 4);

可以通过服务定义树枝扩展,检查您是否在块内尝试过?我的意思是,用
{%block global_test%}
包装所有的
{%set testvar%}
{{code>{testvar}}
。我必须如何在我的symfony2.1项目中放置这两行:“$twig=new twig_Environment($loader);$twig->addGlobal('text',new text());”?我还没有使用symfony2.1,因为它是一个测试版。但是,我可以说,使用Symfony2.016,您可以在config.yml文件中定义所提供的全局变量。事实上,通过这种方式,变量是只读的,我的意思是,在模板中,您可以更改其值,但当您从另一个模板访问它时,您会发现它的值现在是config.ymlIf中设置的默认值。如果您只想更改当前用户的值,可以读取一次并将其存储在会话变量中。如果需要更改所有用户的值,请使用数据库。