如何在使用includes更改它之后获取twig全局变量来维护修改?虽然我得到了“原创设置”,但我想要的输出是“设置@更深”。
应用程序/配置/ config.yml
twig:
globals:
testvar: "original setting"
root.html.twig
{% include "MyBundle::levelone.html.twig" %}
{{ testvar }}
levelone.html.twig
{% set testvar = "set @ levelone" %}
{% include "MyBundle::deeper.html.twig" %}
deeper.html.twig
{% set testvar = "set @ deeper" %}
答案 0 :(得分:8)
从容器感知对象:
$this->get('twig')->addGlobal('ThomasDecauxIsAwsome', 4);
答案 1 :(得分:6)
有趣的问题,我不知道答案,但没有任何数量与块无关的东西将起作用。我查看了生成的php缓存模板文件。当您回显变量时,它看起来像:
// {{ testvar }}
echo twig_escape_filter($this->env, $this->getContext($context, "testvar"), "html", null, true);
所以基本上它首先在你的本地环境中寻找testvar。如果没有找到,那么它会在全局范围内查找。
当您设置test var的值时,您将获得:
// {% set testvar = 'level one' }}
$context["testvar"] = "level one";
因此只有本地上下文才会更新。当包含的模板返回时,更改的值将消失。
所以默认情况下,至少它看起来像全局变量才真正只读。
可以通过扩展来完成此操作。我不太了解内部情况。
答案 2 :(得分:1)
您是否尝试通过Twig定义全局变量?您可以在config.yml文件中执行此操作,如下所示:
twig:
globals:
my_global_var : myvalue
因此,模板中的{{my_global_var}}
会打印myvalue
有关详细信息,请阅读official docs。
答案 3 :(得分:0)
可以通过服务定义 Twig Extension ,查看here