Problem/Motivation
After installation, visiting the configuration page returns the error:
AssertionError: Cannot load a NULL ID. in assert() (line 249 of /Users/****/Sites/****.****/releases/****.****/web/core/lib/Drupal/Core/Entity/EntityStorageBase.php)
#0 /Users/****/Sites/****.****/releases/****.****/web/core/lib/Drupal/Core/Entity/EntityStorageBase.php(249): assert(false, 'Cannot load a N...')
#1 /Users/****/Sites/****.****/releases/****.****/web/modules/contrib/backstop_generator/src/Form/BackstopConfigurationForm.php(85): Drupal\Core\Entity\EntityStorageBase->load(NULL)
#2 [internal function]: Drupal\backstop_generator\Form\BackstopConfigurationForm->buildForm(Array, Object(Drupal\Core\Form\FormState))
#3 /Users/****/Sites/****.****/releases/****.****/web/core/lib/Drupal/Core/Form/FormBuilder.php(519): call_user_func_array(Array, Array)
#4 /Users/****/Sites/****.****/releases/****.****/web/core/lib/Drupal/Core/Form/FormBuilder.php(276): Drupal\Core\Form\FormBuilder->retrieveForm('backstop_config...', Object(Drupal\Core\Form\FormState))
#5 /Users/****/Sites/****.****/releases/****.****/web/core/lib/Drupal/Core/Controller/FormController.php(93): Drupal\Core\Form\FormBuilder->buildForm(Object(Drupal\backstop_generator\Form\BackstopConfigurationForm), Object(Drupal\Core\Form\FormState))
#6 [internal function]: Drupal\Core\Controller\FormController->getContentResult(Object(Symfony\Component\HttpFoundation\Request), Object(Drupal\Core\Routing\RouteMatch))
#7 /Users/****/Sites/****.****/releases/****.****/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(123): call_user_func_array(Array, Array)
#8 /Users/****/Sites/****.****/releases/****.****/web/core/lib/Drupal/Core/Render/Renderer.php(582): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}()
#9 /Users/****/Sites/****.****/releases/****.****/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(124): Drupal\Core\Render\Renderer->executeInRenderContext(Object(Drupal\Core\Render\RenderContext), Object(Closure))
#10 /Users/****/Sites/****.****/releases/****.****/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(97): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext(Array, Array)
#11 /Users/****/Sites/****.****/releases/****.****/vendor/symfony/http-kernel/HttpKernel.php(151): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}()
#12 /Users/****/Sites/****.****/releases/****.****/vendor/symfony/http-kernel/HttpKernel.php(68): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1)
#13 /Users/****/Sites/****.****/releases/****.****/web/core/lib/Drupal/Core/StackMiddleware/Session.php(57): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#14 /Users/****/Sites/****.****/releases/****.****/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(47): Drupal\Core\StackMiddleware\Session->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#15 /Users/****/Sites/****.****/releases/****.****/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(106): Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#16 /Users/****/Sites/****.****/releases/****.****/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(85): Drupal\page_cache\StackMiddleware\PageCache->pass(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#17 /Users/****/Sites/****.****/releases/****.****/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(47): Drupal\page_cache\StackMiddleware\PageCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#18 /Users/****/Sites/****.****/releases/****.****/web/modules/contrib/devel/webprofiler/src/StackMiddleware/WebprofilerMiddleware.php(38): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#19 /Users/****/Sites/****.****/releases/****.****/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(52): Drupal\webprofiler\StackMiddleware\WebprofilerMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#20 /Users/****/Sites/****.****/releases/****.****/vendor/stack/builder/src/Stack/StackedHttpKernel.php(23): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#21 /Users/****/Sites/****.****/releases/****.****/web/core/lib/Drupal/Core/DrupalKernel.php(693): Stack\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#22 /Users/****/Sites/****.****/releases/****.****/web/index.php(19): Drupal\Core\DrupalKernel->handle(Object(Symfony\Component\HttpFoundation\Request))
#23 {main}.
This error causesd a WSOD. Upon inspection, I found out that on the line #85 of src/Form/BackstopConfigurationForm.php
\Drupal::entityTypeManager()->getStorage('node')->load($config->get($configString))
causes an error. The structure of that $config
object is slightly different on our site. Probably due to the multiversion module that we're using or some other module, the pre_defined_pages_table.XXXXXXXXX.page
key is not placed immediately in $config, but it's under overriddenData
key. So DRUPAL throws an error immediately rather than returning null
or FALSE
.
Proposed resolution
Instead of only checking if \Drupal::entityTypeManager
returns a value of null, the following check prevents the error:
if ($config->get($configString) && \Drupal::entityTypeManager()->getStorage('node')->load($config->get($configString)))
I've tested this check in our website with the multiversion module installed and a local Drupal site with no multiversion module. It loads the configuration module.
Remaining tasks
I am now writing a very simple patch so that you can test as well.
User interface changes
N/A
API changes
N/A
Data model changes
N/A
Release notes snippet
Add an extra check before loading nodes in the configuration
Original report by [username]