Score:0

How can I debug a Twig error that occurs after migrating from Drupal 8.9 to Drupal 9+

ธง cn

I am trying migrate my Drupal 8.9 site to Drupal 9+ and I am stuck with an error its cause I am not able to hunt down. On almost every page I get the following PHP exception:

Twig\Error\RuntimeError: The "replace" filter expects an array or 

"Traversable" as replace values, got "string" in "__string_template__faabd18c7a37a1e54d0ef10115b24022e72bc201187fff502de48bf58589321f" at line 2. in twig_replace_filter() (line 554 of /var/customers/webs/freigeist/www9/vendor/twig/twig/src/Extension/CoreExtension.php).

__TwigTemplate_75ee113db094d36d71f294529e9d7055b2065bf116719e9a04b7e4795be3121d->doDisplay() (Line: 405)
Twig\Template->displayWithErrorHandling() (Line: 378)
Twig\Template->display() (Line: 390)
Twig\Template->render() (Line: 45)
Twig\TemplateWrapper->render() (Line: 235)
Drupal\Core\Template\TwigEnvironment->renderInline() (Line: 52)
Drupal\Core\Render\Element\InlineTemplate::preRenderInlineTemplate()
call_user_func_array() (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback() (Line: 786)
Drupal\Core\Render\Renderer->doCallback() (Line: 377)
Drupal\Core\Render\Renderer->doRender() (Line: 201)
Drupal\Core\Render\Renderer->render() (Line: 157)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 578)
Drupal\Core\Render\Renderer->executeInRenderContext() (Line: 158)
Drupal\Core\Render\Renderer->renderPlain() (Line: 419)
Drupal\views\Plugin\views\PluginBase->viewsTokenReplace() (Line: 1356)
Drupal\views\Plugin\views\field\FieldPluginBase->renderAltered() (Line: 1249)
Drupal\views\Plugin\views\field\FieldPluginBase->renderText() (Line: 1177)
Drupal\views\Plugin\views\field\FieldPluginBase->advancedRender() (Line: 238)
template_preprocess_views_view_field() (Line: 287)
Drupal\Core\Theme\ThemeManager->render() (Line: 436)
Drupal\Core\Render\Renderer->doRender() (Line: 201)
Drupal\Core\Render\Renderer->render() (Line: 1745)
Drupal\views\Plugin\views\field\FieldPluginBase->theme() (Line: 778)
Drupal\views\Plugin\views\style\StylePluginBase->elementPreRenderRow()
call_user_func_array() (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback() (Line: 786)
Drupal\Core\Render\Renderer->doCallback() (Line: 377)
Drupal\Core\Render\Renderer->doRender() (Line: 201)
Drupal\Core\Render\Renderer->render() (Line: 717)
Drupal\views\Plugin\views\style\StylePluginBase->renderFields() (Line: 584)
Drupal\views\Plugin\views\style\StylePluginBase->renderGrouping() (Line: 475)
Drupal\views\Plugin\views\style\StylePluginBase->render() (Line: 2170)
Drupal\views\Plugin\views\display\DisplayPluginBase->render() (Line: 1533)
Drupal\views\ViewExecutable->render() (Line: 183)
Drupal\views\Plugin\views\display\Page->execute() (Line: 1630)
Drupal\views\ViewExecutable->executeDisplay() (Line: 81)
Drupal\views\Element\View::preRenderViewElement()
call_user_func_array() (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback() (Line: 786)
Drupal\Core\Render\Renderer->doCallback() (Line: 377)
Drupal\Core\Render\Renderer->doRender() (Line: 201)
Drupal\Core\Render\Renderer->render() (Line: 241)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 578)
Drupal\Core\Render\Renderer->executeInRenderContext() (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare() (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse() (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray()
call_user_func() (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch() (Line: 163)
Symfony\Component\HttpKernel\HttpKernel->handleRaw() (Line: 80)
Symfony\Component\HttpKernel\HttpKernel->handle() (Line: 57)
Drupal\Core\StackMiddleware\Session->handle() (Line: 47)
Drupal\Core\StackMiddleware\KernelPreHandle->handle() (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch() (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup() (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle() (Line: 47)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle() (Line: 52)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle() (Line: 23)
Stack\StackedHttpKernel->handle() (Line: 717)
Drupal\Core\DrupalKernel->handle() (Line: 19)

I found out that the error might be theme related (I am on Bootstrap). And on some pages I could narrow it down to the system block 'site_branding': Disabling this block makes the error disappear on some pages, but not on all.

My first guess was, that this might be an twig compatibility issue (may be in my bootstrap sub-theme), but it occurs also when I use other themes. So I am completely lost here.

How could I debug this error? Does the error message show, which component could be the cause of the error? Can anybody point out, which change between Drupal 8 and 9 could be responsible of the error?

4uk4 avatar
cn flag
คำถามคืออะไร? อะไรไม่ชัดเจนเกี่ยวกับข้อความแสดงข้อผิดพลาด BTW ชื่อเทมเพลตดูไม่เหมือนเทมเพลต Twig จริง ๆ เหมือนเทมเพลตอินไลน์ใน PHP มากกว่า คุณสามารถค้นหาได้ในข้อความแสดงข้อผิดพลาดแบบเต็มด้วยการติดตามสแต็ก
cn flag
@4k4 คุณพูดถูก ฉันไม่ได้ถามคำถามที่ชัดเจน ฉันคิดว่าเมื่อวานมันสายเกินไป ตอนนี้ฉันพยายามทำให้คำถามของฉันชัดเจนขึ้นแล้ว ฉันควรใช้โมดูล devel เพื่อติดตามสแต็ค
4uk4 avatar
cn flag
คุณสามารถเปิดใช้งานข้อความแสดงข้อผิดพลาดแบบเต็มใน Drupal core: /admin/config/development/logging
Score:4
ธง cn

นี่คือบรรทัดสุดท้ายในการติดตามสแต็กก่อนที่ไปป์ไลน์แสดงข้อผิดพลาด:

Drupal\views\Plugin\views\PluginBase->viewsTokenReplace() (บรรทัด: 1356)

อาจเกิดจากก |แทนที่ กรองการเขียนฟิลด์มุมมองใหม่ในมุมมองที่คุณพยายามแสดงเป็นเนื้อหาหลักของเพจ

ดูคำเตือนการเลิกใช้งานใน Drupal 8.9 (Twig 1.x):

ฟังก์ชัน twig_replace_filter($str, $จาก, $to = null) {
  ถ้า (\is_string($from) && \is_string($to)) {
    @trigger_error('การใช้ "แทนที่" กับอักขระโดยการแทนที่อักขระนั้นเลิกใช้แล้วตั้งแต่เวอร์ชัน 1.22 และจะถูกลบออกใน Twig 2.0', E_USER_DEPRECATED);
  

https://api.drupal.org/api/drupal/vendor%21twig%21twig%21src%21Extension%21CoreExtension.php/function/twig_replace_filter/8.9.x

Drupal 9 ได้อัปเกรดเป็น Twig 2.x

https://api.drupal.org/api/drupal/vendor%21twig%21twig%21src%21Extension%21CoreExtension.php/function/twig_replace_filter/9.2.x

cn flag
เยี่ยมมากที่ช่วยได้มาก มันเป็นแฮ็คสกปรกตัวเดียวในมุมมองหลักที่ฉันลืมไป คุณอนุมานได้อย่างไรว่า ´Drupal\views\Plugin\views\PluginBase->viewsTokenReplace() (บรรทัด: 1356)´ เป็นบรรทัดสุดท้ายก่อนเกิดข้อผิดพลาด
4uk4 avatar
cn flag
บรรทัดด้านบนเป็นวิธีการเรนเดอร์ที่เรียกใช้เนื่องจากบรรทัด 419 ของคลาสฐานของปลั๊กอิน Views นี้กำลังเริ่มกระบวนการเรนเดอร์โดยให้ข้อมูลที่จะแสดงผล ดังนั้นจึงเป็นไปได้มากว่าข้อมูลนี้เป็นสาเหตุของปัญหา เว้นแต่ว่าจะมีเทมเพลตที่ผิดพลาดเข้ามาเกี่ยวข้องในการแสดงข้อมูล แต่ข้อความแสดงข้อผิดพลาดกลับมีชื่อเทมเพลต ซึ่งจะทำให้การดีบักง่ายขึ้นมาก

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา