Symfony 2 + Twig全局变量

ojr*_*ore 8 symfony twig

如何在使用includes更改它之后获取twig全局变量来维护修改?虽然我得到了"原创设置",但我想要的输出是"设置@更深".

应用程序/配置/ config.yml

twig:
    globals:
      testvar: "original setting"
Run Code Online (Sandbox Code Playgroud)

root.html.twig

{% include "MyBundle::levelone.html.twig" %}
{{ testvar }}
Run Code Online (Sandbox Code Playgroud)

levelone.html.twig

{% set testvar = "set @ levelone" %}
{% include "MyBundle::deeper.html.twig" %}
Run Code Online (Sandbox Code Playgroud)

deeper.html.twig

{% set testvar = "set @ deeper" %}
Run Code Online (Sandbox Code Playgroud)

Tho*_*aux 8

从容器感知对象:

$this->get('twig')->addGlobal('ThomasDecauxIsAwsome', 4);
Run Code Online (Sandbox Code Playgroud)


Cer*_*rad 6

有趣的问题,我不知道一个答案,但没有任何数量与块有关的东西会起作用.我查看了生成的php缓存模板文件.当您回显变量时,它看起来像:

// {{ testvar }}
echo twig_escape_filter($this->env, $this->getContext($context, "testvar"), "html", null, true);
Run Code Online (Sandbox Code Playgroud)

所以基本上它首先在你的本地环境中寻找testvar.如果没有找到,那么它会在全局范围内查找.

当您设置test var的值时,您会得到:

// {% set testvar = 'level one' }}
$context["testvar"] = "level one";
Run Code Online (Sandbox Code Playgroud)

因此只有本地上下文才会更新.包含的模板返回时,更改的值将消失.

因此,默认情况下,至少看起来全局变量实际上是只读的.

可以通过扩展来完成此操作.我不太了解内部情况.