我无法在TWIG宏中访问模板变量。
这是一个简化的示例:
{% set myname = "Ligio" %}
{{ _self.pagedurl(1) }}
{% macro pagedurl(page) %}
Hi {{ _self.myname }}! This is Page Num {{ page }}
{% endmacro %}
如何在不将变量myname传递给宏的情况下访问它?
你不能这样做。
正如文档中所述:
作为 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中将不再起作用。
您可以设置全局变量,并在模板中的任何地方访问它。
$loader = new \Twig_Loader_Filesystem('path/to/templates');
$twig = new \Twig_Environment($loader);
$twig->addGlobal('V_Name', 'V_Value');
{{ myname }}
吗? - Maerlyn