localgovdrupal / localgov_guides

Paginated guides for LocalGovDrupal
GNU General Public License v2.0
2 stars 5 forks source link

Error: Call to a member function toUrl() on null in Drupal\localgov_guides\Plugin\Block\GuidesPrevNextBlock->build() #31

Open finnlewis opened 3 years ago

finnlewis commented 3 years ago

Not sure of specific steps to reproduce yet, but on Lambeth live site, one of the guid pages got into a twist.

The page would not load, generating this error.

Editing and saving the node resolved the issue.

Debugging locally revealed that this line was choking:

https://github.com/localgovdrupal/localgov_guides/blob/master/src/Plugin/Block/GuidesPrevNextBlock.php#L26

$next_url = $this->guidePages[0]->toUrl();

The guidePages[0] did not exist, but guidePages[1] did!.

So I wonder if maybe this is a case of adding guide pages then removing them causing some internal logic confiusion.

Or maybe caching?

Error: Call to a member function toUrl() on null in Drupal\localgov_guides\Plugin\Block\GuidesPrevNextBlock->build() (line 26 of /var/www/lambethlocalgov/web/modules/contrib/localgov_guides/src/Plugin/Block/GuidesPrevNextBlock.php)
#0 /var/www/lambethlocalgov/web/core/modules/block/src/BlockViewBuilder.php(171): Drupal\localgov_guides\Plugin\Block\GuidesPrevNextBlock->build()
#1 [internal function]: Drupal\block\BlockViewBuilder::preRender(Array)
#2 /var/www/lambethlocalgov/web/core/lib/Drupal/Core/Security/DoTrustedCallbackTrait.php(100): call_user_func_array(Array, Array)
#3 /var/www/lambethlocalgov/web/core/lib/Drupal/Core/Render/Renderer.php(781): Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_ren...', 'silenced_deprec...', 'Drupal\\Core\\Ren...')
#4 /var/www/lambethlocalgov/web/core/lib/Drupal/Core/Render/Renderer.php(372): Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array)
#5 /var/www/lambethlocalgov/web/core/lib/Drupal/Core/Render/Renderer.php(444): Drupal\Core\Render\Renderer->doRender(Array)
#6 /var/www/lambethlocalgov/web/core/lib/Drupal/Core/Render/Renderer.php(200): Drupal\Core\Render\Renderer->doRender(Array, false)
#7 /var/www/lambethlocalgov/web/core/lib/Drupal/Core/Template/TwigExtension.php(501): Drupal\Core\Render\Renderer->render(Array)
#8 /var/www/lambethlocalgov/web/sites/default/files/php/twig/5fbf902b39164_page.html.twig_EC9ShbIBIn9qNrGdLAB1YZ_pd/QKNfccVyoLmlSOUgTZAPaqxdkFMQ4I7lDgTSsbCaGfk.php(115): Drupal\Core\Template\TwigExtension->escapeFilter(Object(Drupal\Core\Template\TwigEnvironment), Array, 'html', NULL, true)
#9 /var/www/lambethlocalgov/vendor/twig/twig/src/Template.php(216): __TwigTemplate_7bbaeffbbd1f8632ec7e802a8b1f9c09fa98b4a046b2d5ff003469f5291c83f7->block_page_content(Array, Array)
#10 /var/www/lambethlocalgov/web/sites/default/files/php/twig/5fbf902b39164__default.twig_fLbPydGfEC55bMSaBs-OMQ0a7/03mJiyGq-h-7tJqjE73K_9G8MkCRgSqLCP-ERTNPKVU.php(110): Twig\Template->displayBlock('page_content', Array, Array)
#11 /var/www/lambethlocalgov/vendor/twig/twig/src/Template.php(455): __TwigTemplate_c846cb971862fb8288b9c9cc14b734c0b1de82103c57764fd45537343216fb42->doDisplay(Array, Array)
#12 /var/www/lambethlocalgov/vendor/twig/twig/src/Template.php(422): Twig\Template->displayWithErrorHandling(Array, Array)
#13 /var/www/lambethlocalgov/web/sites/default/files/php/twig/5fbf902b39164_page.html.twig_EC9ShbIBIn9qNrGdLAB1YZ_pd/QKNfccVyoLmlSOUgTZAPaqxdkFMQ4I7lDgTSsbCaGfk.php(69): Twig\Template->display(Array, Array)
#14 /var/www/lambethlocalgov/vendor/twig/twig/src/Template.php(455): __TwigTemplate_7bbaeffbbd1f8632ec7e802a8b1f9c09fa98b4a046b2d5ff003469f5291c83f7->doDisplay(Array, Array)
#15 /var/www/lambethlocalgov/vendor/twig/twig/src/Template.php(422): Twig\Template->displayWithErrorHandling(Array, Array)
#16 /var/www/lambethlocalgov/vendor/twig/twig/src/Template.php(434): Twig\Template->display(Array)
#17 /var/www/lambethlocalgov/web/core/themes/engines/twig/twig.engine(64): Twig\Template->render(Array)
#18 /var/www/lambethlocalgov/web/core/lib/Drupal/Core/Theme/ThemeManager.php(384): twig_render_template('themes/custom/l...', Array)
#19 /var/www/lambethlocalgov/web/core/lib/Drupal/Core/Render/Renderer.php(431): Drupal\Core\Theme\ThemeManager->render('page', Array)
#20 /var/www/lambethlocalgov/web/core/lib/Drupal/Core/Render/Renderer.php(200): Drupal\Core\Render\Renderer->doRender(Array, false)
#21 /var/www/lambethlocalgov/web/core/lib/Drupal/Core/Template/TwigExtension.php(501): Drupal\Core\Render\Renderer->render(Array)
#22 /var/www/lambethlocalgov/web/sites/default/files/php/twig/5fbf902b39164_html.html.twig_uKaV6EKL1UeJbFblUmj1IJj2a/rHrBmGEOgfOHvVWY6iAknNwVSekjEGocGlFpSKykDH0.php(122): Drupal\Core\Template\TwigExtension->escapeFilter(Object(Drupal\Core\Template\TwigEnvironment), Array, 'html', NULL, true)
#23 /var/www/lambethlocalgov/vendor/twig/twig/src/Template.php(455): __TwigTemplate_7714231ae27af61a11ff245ab9179562cf2fcfc8ad324387671fe5fbb52196ea->doDisplay(Array, Array)
#24 /var/www/lambethlocalgov/vendor/twig/twig/src/Template.php(422): Twig\Template->displayWithErrorHandling(Array, Array)
#25 /var/www/lambethlocalgov/vendor/twig/twig/src/Template.php(434): Twig\Template->display(Array)
#26 /var/www/lambethlocalgov/web/core/themes/engines/twig/twig.engine(64): Twig\Template->render(Array)
#27 /var/www/lambethlocalgov/web/core/lib/Drupal/Core/Theme/ThemeManager.php(384): twig_render_template('themes/custom/l...', Array)
#28 /var/www/lambethlocalgov/web/core/lib/Drupal/Core/Render/Renderer.php(431): Drupal\Core\Theme\ThemeManager->render('html', Array)
#29 /var/www/lambethlocalgov/web/core/lib/Drupal/Core/Render/Renderer.php(200): Drupal\Core\Render\Renderer->doRender(Array, false)
#30 /var/www/lambethlocalgov/web/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php(147): Drupal\Core\Render\Renderer->render(Array)
#31 /var/www/lambethlocalgov/web/core/lib/Drupal/Core/Render/Renderer.php(573): Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}()
#32 /var/www/lambethlocalgov/web/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php(148): Drupal\Core\Render\Renderer->executeInRenderContext(Object(Drupal\Core\Render\RenderContext), Object(Closure))
#33 /var/www/lambethlocalgov/web/core/lib/Drupal/Core/EventSubscriber/MainContentViewSubscriber.php(90): Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object(Symfony\Component\HttpFoundation\Request), Object(Drupal\Core\Routing\CurrentRouteMatch))
#34 [internal function]: Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object(Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent), 'kernel.view', Object(Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher))
#35 /var/www/lambethlocalgov/web/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php(111): call_user_func(Array, Object(Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent), 'kernel.view', Object(Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher))
#36 /var/www/lambethlocalgov/vendor/symfony/http-kernel/HttpKernel.php(156): Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch('kernel.view', Object(Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent))
#37 /var/www/lambethlocalgov/vendor/symfony/http-kernel/HttpKernel.php(68): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1)
#38 /var/www/lambethlocalgov/web/core/lib/Drupal/Core/StackMiddleware/Session.php(57): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#39 /var/www/lambethlocalgov/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(47): Drupal\Core\StackMiddleware\Session->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#40 /var/www/lambethlocalgov/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(106): Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#41 /var/www/lambethlocalgov/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(85): Drupal\page_cache\StackMiddleware\PageCache->pass(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#42 /var/www/lambethlocalgov/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(47): Drupal\page_cache\StackMiddleware\PageCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#43 /var/www/lambethlocalgov/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(52): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#44 /var/www/lambethlocalgov/vendor/stack/builder/src/Stack/StackedHttpKernel.php(23): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#45 /var/www/lambethlocalgov/web/core/lib/Drupal/Core/DrupalKernel.php(708): Stack\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#46 /var/www/lambethlocalgov/web/index.php(19): Drupal\Core\DrupalKernel->handle(Object(Symfony\Component\HttpFoundation\Request))
#47 {main}
ekes commented 3 years ago

If a referenced entity has been moved the references field should be update with https://github.com/localgovdrupal/localgov_guides/blob/28bc1b8695f49c14803bc82cfdd2fd7006859a2a/src/ChildParentRelationship.php#L74 The save should clear the cache.

If the referenced entity is deleted I'm missing are we missing a hook_entity_delete() https://github.com/localgovdrupal/localgov_guides/blob/master/localgov_guides.module