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

问题描述 投票:14回答:2

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

php twig
2个回答
24
投票

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

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

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


1
投票

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

例如,当我有

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

我现在在一个名为UtilitiesExtensionthe的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函数。当然,这应该适应您的需要。

© www.soinside.com 2019 - 2024. All rights reserved.