17

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

这是一个简化的示例:

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

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

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

4

3 回答 3

21

你不能。

如文档中所述:

作为 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

于 2013-03-02T17:23:57.810 回答
12

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

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

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

参考:这个这个答案。

于 2014-12-24T13:25:52.240 回答
3

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

$loader = new \Twig_Loader_Filesystem('path/to/templates');
$twig = new \Twig_Environment($loader);
$twig->addGlobal('V_Name', 'V_Value');
于 2020-05-14T00:10:55.647 回答