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

2022-08-31 00:45:01

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


答案 1

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

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

如果错误出现在包含 或 的行上,则必须查看正在包含/扩展的模板,并将宏导入到该模板中。{{ include }}{{ extends }}


答案 2

如果您有大量使用宏的 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。当然,这应该适合您的需求。


推荐