如何在TWIG宏中访问模板变量?

时间:2013-02-27 08:52:56

标签: variables macros twig

我无法在TWIG宏中访问模板变量。

这是一个简化的例子:

{% set myname = "Ligio" %}
{{ _self.pagedurl(1) }}

{% macro pagedurl(page) %}
    Hi {{ _self.myname }}! This is Page Num {{ page }}
{% endmacro %}

如何在不将变量传递给宏的情况下访问变量 myname

3 个答案:

答案 0 :(得分:19)

你不能。

如文件中所述:

  

作为PHP函数,宏无权访问当前模板   变量

您唯一的解决方案是将参数传递给macro

{% import _self as flow %}
{{ flow.pagedurl(1, "Ligio") }}

{% macro pagedurl(page, myname) %}
    Hi {{ myname }}! This is Page Num {{ page }}
{% endmacro %}

重要提示:

您可能已在我的示例中注意到,我致电{% import _self as flow %} 这是你必须做的事情:

  

在模板中定义要使用它的宏时,   你可能想通过_self.input()直接调用宏   而不是导入它;即使似乎工作,这只是一个   当前实施的副作用,它将不再起作用   Twig 2.x。

http://twig.sensiolabs.org/doc/tags/macro.html

答案 1 :(得分:6)

如果您需要将多个全局变量传递到宏中,您可能会发现_context变量很有用:

{% macro mymacro(globalvars) %}
    Value of the global variable pi is {{ globalvars.pi }}
{% endmacro %}

{% set pi = 3.14159 %}
{{ _self.mymacro(_context) }}

参考:thisthis回答。

答案 2 :(得分:2)

您可以设置全局变量并在模板中的任何位置访问它

$loader = new \Twig_Loader_Filesystem('path/to/templates');
$twig = new \Twig_Environment($loader);
$twig->addGlobal('V_Name', 'V_Value');