Adding CSS Classes to Block Crashes Site.

Created on 10 September 2024, 7 months ago

Problem/Motivation

When trying to add css class to a block, site crashes with the following errors:

TypeError: array_merge(): Argument #1 must be of type array, string given in array_merge() (line 202 of /code/web/modules/contrib/block_class/src/Service/BlockClassHelperService.php).
#0 /code/web/modules/contrib/block_class/src/Service/BlockClassHelperService.php(202): array_merge('{"layout__wrapp...', Array)
#1 /code/web/modules/contrib/block_class/block_class.module(107): Drupal\block_class\Service\BlockClassHelperService->blockClassPreSave(Object(Drupal\block\Entity\Block))
#2 [internal function]: block_class_block_presave(Object(Drupal\block\Entity\Block))
#3 /code/web/core/lib/Drupal/Core/Extension/ModuleHandler.php(416): call_user_func_array(Object(Closure), Array)
#4 /code/web/core/lib/Drupal/Core/Extension/ModuleHandler.php(395): Drupal\Core\Extension\ModuleHandler->Drupal\Core\Extension\{closure}(Object(Closure), 'block_class')
#5 /code/web/core/lib/Drupal/Core/Extension/ModuleHandler.php(415): Drupal\Core\Extension\ModuleHandler->invokeAllWith('block_presave', Object(Closure))
#6 /code/web/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php(341): Drupal\Core\Extension\ModuleHandler->invokeAll('block_presave', Array)
#7 /code/web/core/lib/Drupal/Core/Entity/EntityStorageBase.php(529): Drupal\Core\Config\Entity\ConfigEntityStorage->invokeHook('presave', Object(Drupal\block\Entity\Block))
#8 /code/web/core/lib/Drupal/Core/Entity/EntityStorageBase.php(483): Drupal\Core\Entity\EntityStorageBase->doPreSave(Object(Drupal\block\Entity\Block))
#9 /code/web/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php(257): Drupal\Core\Entity\EntityStorageBase->save(Object(Drupal\block\Entity\Block))
#10 /code/web/core/lib/Drupal/Core/Entity/EntityBase.php(354): Drupal\Core\Config\Entity\ConfigEntityStorage->save(Object(Drupal\block\Entity\Block))
#11 /code/web/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php(614): Drupal\Core\Entity\EntityBase->save()
#12 /code/web/core/lib/Drupal/Core/Entity/EntityForm.php(293): Drupal\Core\Config\Entity\ConfigEntityBase->save()
#13 /code/web/core/modules/block/src/BlockForm.php(362): Drupal\Core\Entity\EntityForm->save(Array, Object(Drupal\Core\Form\FormState))
#14 [internal function]: Drupal\block\BlockForm->save(Array, Object(Drupal\Core\Form\FormState))
#15 /code/web/core/lib/Drupal/Core/Form/FormSubmitter.php(129): call_user_func_array(Array, Array)
#16 /code/web/core/lib/Drupal/Core/Form/FormSubmitter.php(67): Drupal\Core\Form\FormSubmitter->executeSubmitHandlers(Array, Object(Drupal\Core\Form\FormState))
#17 /code/web/core/lib/Drupal/Core/Form/FormBuilder.php(597): Drupal\Core\Form\FormSubmitter->doSubmitForm(Array, Object(Drupal\Core\Form\FormState))
#18 /code/web/core/lib/Drupal/Core/Form/FormBuilder.php(326): Drupal\Core\Form\FormBuilder->processForm('block_form', Array, Object(Drupal\Core\Form\FormState))
#19 /code/web/core/lib/Drupal/Core/Controller/FormController.php(73): Drupal\Core\Form\FormBuilder->buildForm(Object(Drupal\block\BlockForm), Object(Drupal\Core\Form\FormState))
#20 [internal function]: Drupal\Core\Controller\FormController->getContentResult(Object(Symfony\Component\HttpFoundation\Request), Object(Drupal\Core\Routing\RouteMatch))
#21 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(123): call_user_func_array(Array, Array)
#22 /code/web/core/lib/Drupal/Core/Render/Renderer.php(638): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}()
#23 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(121): Drupal\Core\Render\Renderer->executeInRenderContext(Object(Drupal\Core\Render\RenderContext), Object(Closure))
#24 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(97): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext(Array, Array)
#25 /code/vendor/symfony/http-kernel/HttpKernel.php(181): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}()
#26 /code/vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1)
#27 /code/web/core/lib/Drupal/Core/StackMiddleware/Session.php(53): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#28 /code/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#29 /code/web/core/lib/Drupal/Core/StackMiddleware/ContentLength.php(28): Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#30 /code/web/core/modules/big_pipe/src/StackMiddleware/ContentLength.php(32): Drupal\Core\StackMiddleware\ContentLength->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#31 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(106): Drupal\big_pipe\StackMiddleware\ContentLength->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#32 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(85): Drupal\page_cache\StackMiddleware\PageCache->pass(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#33 /code/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Drupal\page_cache\StackMiddleware\PageCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#34 /code/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#35 /code/web/core/lib/Drupal/Core/StackMiddleware/AjaxPageState.php(36): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#36 /code/web/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\Core\StackMiddleware\AjaxPageState->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#37 /code/web/core/lib/Drupal/Core/DrupalKernel.php(741): Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#38 /code/web/index.php(19): Drupal\Core\DrupalKernel->handle(Object(Symfony\Component\HttpFoundation\Request))
#39 {main}
πŸ› Bug report
Status

Active

Version

2.0

Component

User interface

Created by

πŸ‡ΊπŸ‡ΈUnited States nathanhealea

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

Merge Requests

Comments & Activities

  • Issue created by @nathanhealea
  • πŸ‡ΊπŸ‡ΈUnited States wheelercreek

    I'm seeing the same issue.

    When I var_dump the variable in BlockClassHelperService.php on line 196 it showed as a long string of block names in JSON notation. The array_merge function is expecting an array.

    I then added this line after line 196:
    $block_classes_stored = json_decode($block_classes_stored, true);

    The error went away then, but on the second time I saved it came back this time complaining that the value I was trying to pass through json_decode was already an array. I removed my added line and saving the block worked fine.

    So maybe we need to add a function there to test if the string is in JSON notation?

  • Pipeline finished with Failed
    7 months ago
    Total: 172s
    #280583
  • Pipeline finished with Failed
    7 months ago
    Total: 214s
    #280593
  • πŸ‡²πŸ‡ΎMalaysia hunchang

    I had the same issue, when we run drush cim.

    Added what wheelercreek suggest but the other config file is complaining pass through json_decode was an array (just like what wheelercreek experience).

    created a patch to fix the issue, basically added checking if it is array

    if (!is_array($block_classes_stored)) {
            $block_classes_stored = json_decode($block_classes_stored, true);
        }
    
  • πŸ‡¦πŸ‡ΊAustralia jannakha Brisbane!

    check your config has been updated by re-running block_class_update_20017()
    this update transformed config from string to json and if your config is old block_class will keep crashing

Production build 0.71.5 2024