如何在使用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)
从容器感知对象:
$this->get('twig')->addGlobal('ThomasDecauxIsAwsome', 4);
Run Code Online (Sandbox Code Playgroud)
有趣的问题,我不知道一个答案,但没有任何数量与块有关的东西会起作用.我查看了生成的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)
因此只有本地上下文才会更新.包含的模板返回时,更改的值将消失.
因此,默认情况下,至少看起来全局变量实际上是只读的.
可以通过扩展来完成此操作.我不太了解内部情况.
| 归档时间: |
|
| 查看次数: |
19347 次 |
| 最近记录: |