我无法在TWIG宏中访问模板变量。
这是一个简化的例子:
{% set myname = "Ligio" %}
{{ _self.pagedurl(1) }}
{% macro pagedurl(page) %}
Hi {{ _self.myname }}! This is Page Num {{ page }}
{% endmacro %}
如何在不将变量传递给宏的情况下访问变量 myname ?
答案 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。
答案 1 :(得分:6)
如果您需要将多个全局变量传递到宏中,您可能会发现_context
变量很有用:
{% macro mymacro(globalvars) %}
Value of the global variable pi is {{ globalvars.pi }}
{% endmacro %}
{% set pi = 3.14159 %}
{{ _self.mymacro(_context) }}
答案 2 :(得分:2)
您可以设置全局变量并在模板中的任何位置访问它
$loader = new \Twig_Loader_Filesystem('path/to/templates');
$twig = new \Twig_Environment($loader);
$twig->addGlobal('V_Name', 'V_Value');