Preview submit gets 500 error

Created on 6 September 2021, almost 4 years ago
Updated 1 August 2023, almost 2 years ago

Problem/Motivation

The plugin tries to communicate with Drupal in the edit form. It submits the button "Seo preview", which is an AJAX call to Drupal.
With Drupal 9.2.x, and when the user uses a different theme for editing nodes and main theme, this submission causes a 500 error.
This is because the submission triggers a render functionality (in EntityAnalyser) which ultimately fails as not all the twig templates are loaded, because the theme being used is an admin theme, but the theme requested to render is the active one.
This does not happen if for editing the node non admin theme is used.

Steps to reproduce

Install the module, and create a content type, with this module configured.
Set an admin theme for editing nodes, different from the main theme of the site.
Try to create a node, and wait for the 'Seo preview' submission, which happens automatically. This submission will fail, so yoast seo plugin
cannot complete its function.

Proposed resolution

This is an issue introduced in Drupal 9. I could test with Drupal 8 with exactly same yoast_seo module and it worked fine. Maybe there's another issue reported in core, but I could not find it so this is why I reported this issue here.

Remaining tasks

User interface changes

API changes

Data model changes

🐛 Bug report
Status

Needs review

Component

Code

Created by

🇫🇮Finland eldrupalista

Live updates comments and jobs are added and updated live.
Sign in to follow issues

Comments & Activities

Not all content is available!

It's likely this issue predates Contrib.social: some issue and comment data are missing.

  • 🇧🇪Belgium dieterholvoet Brussels

    I'm having the same issue. Here's the error and stack trace:

    Twig\Error\LoaderError: Template "/themes/contrib/gin/templates/paragraphs/paragraph.html.twig" is not defined. in file [...]/web/themes/custom/brik/templates/content/node.html.twig on line 79
    
    #0 [...]/vendor/twig/twig/src/Environment.php(264): Twig\Loader\ChainLoader->getCacheKey('/themes/contrib...')
    #1 [...]/web/core/lib/Drupal/Core/Template/TwigEnvironment.php(204): Twig\Environment->getTemplateClass('/themes/contrib...', NULL)
    #2 [...]/vendor/twig/twig/src/Template.php(319): Drupal\Core\Template\TwigEnvironment->getTemplateClass('/themes/contrib...')
    #3 [...]/vendor/twig/twig/src/Environment.php(364) : eval()'d code(37): Twig\Template->loadTemplate('/themes/contrib...', 'themes/custom/b...', 79)
    #4 [...]/vendor/twig/twig/src/Template.php(86): __TwigTemplate_3acc222a5210d8a88bb4f3442dcda993->doGetParent(Array)
    #5 [...]/vendor/twig/twig/src/Environment.php(364) : eval()'d code(59): Twig\Template->getParent(Array)
    #6 [...]/vendor/twig/twig/src/Template.php(394): __TwigTemplate_3acc222a5210d8a88bb4f3442dcda993->doDisplay(Array, Array)
    #7 [...]/vendor/twig/twig/src/Template.php(367): Twig\Template->displayWithErrorHandling(Array, Array)
    #8 [...]/vendor/twig/twig/src/Template.php(379): Twig\Template->display(Array)
    #9 [...]/vendor/twig/twig/src/TemplateWrapper.php(40): Twig\Template->render(Array, Array)
    #10 [...]/web/core/themes/engines/twig/twig.engine(53): Twig\TemplateWrapper->render(Array)
    #11 [...]/web/core/lib/Drupal/Core/Theme/ThemeManager.php(372): twig_render_template('themes/custom/b...', Array)
    #12 [...]/web/core/lib/Drupal/Core/Render/Renderer.php(436): Drupal\Core\Theme\ThemeManager->render('paragraph', Array)
    #13 [...]/web/core/lib/Drupal/Core/Render/Renderer.php(204): Drupal\Core\Render\Renderer->doRender(Array, false)
    #14 [...]/web/core/lib/Drupal/Core/Template/TwigExtension.php(474): Drupal\Core\Render\Renderer->render(Array)
    #15 [...]/vendor/twig/twig/src/Environment.php(364) : eval()'d code(85): Drupal\Core\Template\TwigExtension->escapeFilter(Object(Drupal\Core\Template\TwigEnvironment), Array, 'html', NULL, true)
    #16 [...]/vendor/twig/twig/src/Template.php(394): __TwigTemplate_f428814f706095374576c7ef5f6176f5->doDisplay(Array, Array)
    #17 [...]/vendor/twig/twig/src/Template.php(367): Twig\Template->displayWithErrorHandling(Array, Array)
    #18 [...]/vendor/twig/twig/src/Template.php(379): Twig\Template->display(Array)
    #19 [...]/vendor/twig/twig/src/TemplateWrapper.php(40): Twig\Template->render(Array, Array)
    #20 [...]/web/core/themes/engines/twig/twig.engine(53): Twig\TemplateWrapper->render(Array)
    #21 [...]/web/core/lib/Drupal/Core/Theme/ThemeManager.php(372): twig_render_template('themes/custom/b...', Array)
    #22 [...]/web/core/lib/Drupal/Core/Render/Renderer.php(436): Drupal\Core\Theme\ThemeManager->render('field', Array)
    #23 [...]/web/core/lib/Drupal/Core/Render/Renderer.php(204): Drupal\Core\Render\Renderer->doRender(Array, false)
    #24 [...]/web/core/lib/Drupal/Core/Template/TwigExtension.php(474): Drupal\Core\Render\Renderer->render(Array)
    #25 [...]/vendor/twig/twig/src/Environment.php(364) : eval()'d code(152): Drupal\Core\Template\TwigExtension->escapeFilter(Object(Drupal\Core\Template\TwigEnvironment), Array, 'html', NULL, true)
    #26 [...]/vendor/twig/twig/src/Template.php(171): __TwigTemplate_ce0731aedefd6bf504707149ed475851->block_content(Array, Array)
    #27 [...]/vendor/twig/twig/src/Environment.php(364) : eval()'d code(98): Twig\Template->displayBlock('content', Array, Array)
    #28 [...]/vendor/twig/twig/src/Template.php(394): __TwigTemplate_ce0731aedefd6bf504707149ed475851->doDisplay(Array, Array)
    #29 [...]/vendor/twig/twig/src/Template.php(367): Twig\Template->displayWithErrorHandling(Array, Array)
    #30 [...]/vendor/twig/twig/src/Template.php(379): Twig\Template->display(Array)
    #31 [...]/vendor/twig/twig/src/TemplateWrapper.php(40): Twig\Template->render(Array, Array)
    #32 [...]/web/core/themes/engines/twig/twig.engine(53): Twig\TemplateWrapper->render(Array)
    #33 [...]/web/core/lib/Drupal/Core/Theme/ThemeManager.php(372): twig_render_template('themes/custom/b...', Array)
    #34 [...]/web/core/lib/Drupal/Core/Render/Renderer.php(436): Drupal\Core\Theme\ThemeManager->render('node', Array)
    #35 [...]/web/core/lib/Drupal/Core/Render/Renderer.php(204): Drupal\Core\Render\Renderer->doRender(Array, true)
    #36 [...]/web/core/lib/Drupal/Core/Render/Renderer.php(148): Drupal\Core\Render\Renderer->render(Array, true)
    #37 [...]/web/core/lib/Drupal/Core/Render/Renderer.php(583): Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}()
    #38 [...]/web/core/lib/Drupal/Core/Render/Renderer.php(149): Drupal\Core\Render\Renderer->executeInRenderContext(Object(Drupal\Core\Render\RenderContext), Object(Closure))
    #39 [...]/web/modules/contrib/yoast_seo/src/EntityAnalyser.php(195): Drupal\Core\Render\Renderer->renderRoot(Array)
    #40 [...]/web/modules/contrib/yoast_seo/src/EntityAnalyser.php(123): Drupal\yoast_seo\EntityAnalyser->renderEntity(Object(Drupal\minsky\Entity\Node\Page), 'brik', 'default')
    #41 [...]/web/modules/contrib/yoast_seo/src/Form/AnalysisFormHandler.php(78): Drupal\yoast_seo\EntityAnalyser->createEntityPreview(Object(Drupal\minsky\Entity\Node\Page), 'brik', 'default')
    #42 [internal function]: Drupal\yoast_seo\Form\AnalysisFormHandler->analysisSubmitAjax(Array, Object(Drupal\Core\Form\FormState), Object(Symfony\Component\HttpFoundation\Request))
    #43 [...]/web/core/lib/Drupal/Core/Form/FormAjaxResponseBuilder.php(69): call_user_func_array(Array, Array)
    #44 [...]/web/core/lib/Drupal/Core/Form/EventSubscriber/FormAjaxSubscriber.php(109): Drupal\Core\Form\FormAjaxResponseBuilder->buildResponse(Object(Symfony\Component\HttpFoundation\Request), Array, Object(Drupal\Core\Form\FormState), Array)
    #45 [internal function]: Drupal\Core\Form\EventSubscriber\FormAjaxSubscriber->onException(Object(Symfony\Component\HttpKernel\Event\ExceptionEvent), 'kernel.exceptio...', Object(Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher))
    #46 [...]/web/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php(111): call_user_func(Array, Object(Symfony\Component\HttpKernel\Event\ExceptionEvent), 'kernel.exceptio...', Object(Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher))
    #47 [...]/vendor/symfony/http-kernel/HttpKernel.php(224): Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object(Symfony\Component\HttpKernel\Event\ExceptionEvent), 'kernel.exceptio...')
    #48 [...]/vendor/symfony/http-kernel/HttpKernel.php(89): Symfony\Component\HttpKernel\HttpKernel->handleThrowable(Object(Drupal\Core\Form\FormAjaxException), Object(Symfony\Component\HttpFoundation\Request), 1)
    #49 [...]/web/core/lib/Drupal/Core/StackMiddleware/Session.php(58): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #50 [...]/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #51 [...]/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(106): Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #52 [...]/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(85): Drupal\page_cache\StackMiddleware\PageCache->pass(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #53 [...]/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Drupal\page_cache\StackMiddleware\PageCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #54 [...]/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #55 [...]/web/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #56 [...]/web/core/lib/Drupal/Core/DrupalKernel.php(704): Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
    #57 [...]/web/index.php(19): Drupal\Core\DrupalKernel->handle(Object(Symfony\Component\HttpFoundation\Request))
    #58 /Users/dieterholvoet/.composer/vendor/laravel/valet/server.php(110): require('/Users/dieterho...')
    #59 {main}
    

    I checked EntityAnalyser::renderEntity and the frontend theme is successfully passed to $this->themeManager->setActiveTheme(), but still Twig tries to include a template from the active admin theme.

  • Status changed to Needs review almost 2 years ago
  • 🇧🇪Belgium dieterholvoet Brussels

    I found the problem! This only happens if you use the directory variable in your frontend templates, because that variable isn't updated after changing the active theme. This is a core bug, so I opened a separate issue: 🐛 Directory default variable isn't updated after changing the active theme Needs work . You can include the patch from that issue as a workaround.

Production build 0.71.5 2024