“Twig_Error_Syntax”,并显示消息“未知”“呈现”过滤器

2022-08-30 18:38:01

我正在运行drupal 8,composer和npm来执行吞噬任务。

当我运行 npm 启动..我的任务管理器:我得到以下堆栈跟踪:

Fatal error: Uncaught exception 'Twig_Error_Syntax' with message 'Unknown "render" filter.' in /web/project/web/themes/emulsify/components/_patterns/04-templates/basic-page/_basic_page.twig:26
Stack trace:
#0 /web/project/web/themes/emulsify/pattern-lab/vendor/twig/twig/lib/Twig/ExpressionParser.php(481): Twig_ExpressionParser->getFilterNodeClass('render', 26)
#1 /web/project/web/themes/project_theme/pattern-lab/vendor/twig/twig/lib/Twig/ExpressionParser.php(466): Twig_ExpressionParser->parseFilterExpressionRaw(Object(Twig_Node_Expression_Name))
#2 /web/project/web/themes/project_theme/pattern-lab/vendor/twig/twig/lib/Twig/ExpressionParser.php(320): Twig_ExpressionParser->parseFilterExpression(Object(Twig_Node_Expression_Name))
#3 /web/project/web/themes/project_theme/pattern-lab/vendor/twig/twig/lib/Twig/ExpressionParser.php(212): Twig_ExpressionParser->parsePostfixExpression(Object(Twig_Node_Expression_Name))
#4 /web/project in /web/project/web/themes/project_theme/components/_patterns/04-templates/basic-page/_basic_page.twig on line 26

我已经考虑过通过作曲家安装树枝桥/ symfony树枝,但我似乎无法摆脱错误消息。

我只是放弃使用树枝过滤器“渲染”吗?


更新: 14/08/17

在尝试使用通过Drupal 8的twig_tweak模块提供的drupal_block函数时,我也遇到了同样的问题。


答案 1

上面代码中的问题是你的 Twig 扩展类正在扩展内部 Drupal Twig 扩展类。这破坏了Drupal核心添加的Twig扩展,这就是为什么你得到错误。

若要解决此问题,应使 Twig 扩展扩展 Twigs 内部 Twig 扩展类。您的类应按如下方式定义:

class MyExtension extends \Twig_Extension {

进行该更改后,还可以从 MODULE.services.yml 中删除为该类设置的参数

链接


答案 2

我没有在Drupal上下文中看到过这种情况,但是使用其他使用Twig的平台,我看到在平台设置过程的早期发生错误时也会发生类似的问题。

典型的事件顺序如下:

  • 平台开始运行其启动;加载 CMS 核心等
  • 在此过程早期的某个时刻,它会遇到错误。
  • 然后,它会尝试呈现错误页。
  • 但是,错误页面使用 Twig 模板。
  • 启动过程尚未加载模板中使用的所有树枝扩展。
  • Boom,您收到一个树枝错误,指出“未知的树枝功能”,而不是真正的错误消息。

当我以前遇到这种情况时,事实证明很难诊断实际错误是什么。

“正确”的解决方案是修改错误页面模板,使它们最小,并且不使用任何非核心树枝函数。但是,如果您在页面加载过程的早期遇到崩溃,则可能很难实际执行此操作。

在第一种情况下,我通过调试系统并捕获传递给模板的数据来解决它。这向我展示了真正的错误是什么。然后,解决该错误阻止了树枝错误的发生,并允许我进入系统。

我不确定你所看到的是否与我所看到的是同一种东西,但它听起来很相似,所以我希望这会有所帮助。


推荐