Symfony 2+;细枝全局变量
在使用includes更改twig全局变量后,如何使其保持修改?虽然我得到了“原始设置”,但我想要的输出是“设置@更深” app/config/config.ymlSymfony 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" %} {
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中设置的默认值。如果您只想更改当前用户的值,可以读取一次并将其存储在会话变量中。如果需要更改所有用户的值,请使用数据库。