Symfony 2 + Twig全局变量

时间:2012-02-13 16:15:52

标签: symfony twig

如何在使用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" %}

4 个答案:

答案 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

相关问题