Twig 2.0 错误消息“禁止访问Twig_Template属性”
自从升级到Twig 2.0以来,我收到错误消息。引用的线路包含宏调用或宏调用。Accessing Twig_Template attributes is forbidden
{{ include }}
自从升级到Twig 2.0以来,我收到错误消息。引用的线路包含宏调用或宏调用。Accessing Twig_Template attributes is forbidden
{{ include }}
在 Twig 2.0 中,'ed 宏不再继承到子模板,请参阅 https://github.com/twigphp/Twig/issues/2336{{ import }}
解决方案:您需要在每个 .twig 文件中导入所需的宏。
如果错误出现在包含 或 的行上,则必须查看正在包含/扩展的模板,并将宏导入到该模板中。{{ include }}
{{ extends }}
如果您有大量使用宏的 Twig 文件,则通过 Twig 扩展定义全局 Twig 函数可能更容易且不易出错。这样,您就不需要导入每个文件中的宏(这可能会在将来的Twig版本中修复)。
例如,当我有
{% macro error(message, dismissible=true) %}
{# Error display code #}
{% endmacro %}
我现在在一个名为以下函数的Twig Extension中定义了:UtilitiesExtension
public function getFunctions()
{
return array(
// ...
new \Twig_SimpleFunction('error', array($this, 'error')),
);
}
public function error($message, $dismissible = true) {
return $this->twig->render('patterns/utils/error.html.twig', [
'text' => $message,
'limit' => $dismissible,
]);
}
然后,您需要将宏调用替换为函数名称;请注意,不能在函数名称中使用点。
这个解决方案很干净,因为Twig Macros应该等同于PHP Functions。当然,这应该适合您的需求。