Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
finnlewis opened this issue Nov 26, 2020 · 1 comment

Comments

@finnlewis
Copy link
Member

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 ekes mentioned this issue Apr 28, 2021
@ekes
Copy link
Member

ekes commented Apr 28, 2021

If a referenced entity has been moved the references field should be update with

public function pageUpdateOverview(NodeInterface $node) {
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

ekes added a commit that referenced this issue May 5, 2021
MR #47 for issue #44 incidentally also fixed calling deleted entity
references in the 'drupal way'™ by checking that they exist before
calling them. The module does however already provide update hooks for
pages, as described in #6 and mentioned in #31 (comment)
so completism we should also make a hook_delete to remove them from the
references?
This was referenced May 5, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants