Twig 2.0错误消息"禁止访问Twig_Template属性"

时间:2017-01-11 11:44:21

标签: php twig

自升级到Twig 2.0后,我收到错误消息Accessing Twig_Template attributes is forbidden。引用的行包含{{ include }}或宏调用。

2 个答案:

答案 0 :(得分:24)

在Twig 2.0中{{ import }}' ed宏不再继承到子模板,请参阅https://github.com/twigphp/Twig/issues/2336

解决方案:您需要在每个.twig文件中导入所需的宏。

如果错误显示在包含{{ include }}{{ extends }}的行上,您必须查看正在包含/扩展的模板,并在那里导入宏。

答案 1 :(得分:1)

如果您使用宏有很多Twig文件,那么定义全局Twig函数a Twig Extension可能更容易且更不容易出错。这样您就不需要在每个文件中导入宏(这可能会在将来的Twig版本中修复)。

例如,当我有

{% macro error(message, dismissible=true) %}
   {# Error display code #}
{% endmacro %}

我现在在名为UtilitiesExtension的Twig Extension中定义了以下函数:

    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宏应该等同于PHP函数。当然,这应该适应您的需求。