TypeError: Cannot access offset of type string on string in Drupal\eca_views\Plugin\Action\ViewsSetFilter->execute() (line 68 of /var/lib/tugboat/stm/web/modules/contrib/eca/modules/views/src/Plugin/Action/ViewsSetFilter.php).

Created on 25 February 2025, 3 months ago

Hello!

Just tried to change the value of a filter ( Taxonomy term: Name) and and error is logged. Please note that the filter value can be changed without problems if using the filter Taxonomy term: Term ID (tid_raw).

This can be reproduced on simpletest.me. Attached is the problematic model.

TypeError: Cannot access offset of type string on string in Drupal\eca_views\Plugin\Action\ViewsSetFilter->execute() (line 68 of /var/lib/tugboat/stm/web/modules/contrib/eca/modules/views/src/Plugin/Action/ViewsSetFilter.php).

#0 /var/lib/tugboat/stm/web/modules/contrib/eca/src/Entity/Objects/EcaAction.php(107): Drupal\eca_views\Plugin\Action\ViewsSetFilter->execute(NULL)
#1 /var/lib/tugboat/stm/web/modules/contrib/eca/src/Processor.php(298): Drupal\eca\Entity\Objects\EcaAction->execute(Object(Drupal\eca\Entity\Objects\EcaEvent), Object(Drupal\eca_views\Event\PreBuild), Array)
#2 /var/lib/tugboat/stm/web/modules/contrib/eca/src/Processor.php(222): Drupal\eca\Processor->executeSuccessors(Object(Drupal\eca\Entity\Eca), Object(Drupal\eca\Entity\Objects\EcaEvent), Object(Drupal\eca_views\Event\PreBuild), Array)
#3 /var/lib/tugboat/stm/web/modules/contrib/eca/src/EventSubscriber/DynamicSubscriber.php(39): Drupal\eca\Processor->execute(Object(Drupal\eca_views\Event\PreBuild), 'eca_views.pre_b...')
#4 /var/lib/tugboat/stm/vendor/symfony/event-dispatcher/EventDispatcher.php(206): Drupal\eca\EventSubscriber\DynamicSubscriber->onEvent(Object(Drupal\eca_views\Event\PreBuild), 'eca_views.pre_b...', Object(Symfony\Component\EventDispatcher\EventDispatcher))
#5 /var/lib/tugboat/stm/vendor/symfony/event-dispatcher/EventDispatcher.php(56): Symfony\Component\EventDispatcher\EventDispatcher->callListeners(Array, 'eca_views.pre_b...', Object(Drupal\eca_views\Event\PreBuild))
#6 /var/lib/tugboat/stm/web/modules/contrib/eca/src/Event/TriggerEvent.php(66): Symfony\Component\EventDispatcher\EventDispatcher->dispatch(Object(Drupal\eca_views\Event\PreBuild), 'eca_views.pre_b...')
#7 /var/lib/tugboat/stm/web/modules/contrib/eca/modules/views/src/HookHandler.php(54): Drupal\eca\Event\TriggerEvent->dispatchFromPlugin('eca_views:pre_b...', Object(Drupal\views\ViewExecutable))
#8 /var/lib/tugboat/stm/web/modules/contrib/eca/modules/views/eca_views.module(41): Drupal\eca_views\HookHandler->preBuild(Object(Drupal\views\ViewExecutable))
#9 [internal function]: eca_views_views_pre_build(Object(Drupal\views\ViewExecutable))
#10 /var/lib/tugboat/stm/web/core/lib/Drupal/Core/Extension/ModuleHandler.php(355): call_user_func_array('\\eca_views_view...', Array)
#11 /var/lib/tugboat/stm/web/core/lib/Drupal/Core/Extension/ModuleHandler.php(307): Drupal\Core\Extension\ModuleHandler->{closure:Drupal\Core\Extension\ModuleHandler::invokeAll():354}('\\eca_views_view...', 'eca_views')
#12 /var/lib/tugboat/stm/web/core/lib/Drupal/Core/Extension/ModuleHandler.php(354): Drupal\Core\Extension\ModuleHandler->invokeAllWith('views_pre_build', Object(Closure))
#13 /var/lib/tugboat/stm/web/core/modules/views/src/ViewExecutable.php(1269): Drupal\Core\Extension\ModuleHandler->invokeAll('views_pre_build', Array)
#14 /var/lib/tugboat/stm/web/core/modules/views/src/ViewExecutable.php(1451): Drupal\views\ViewExecutable->build(NULL)
#15 /var/lib/tugboat/stm/web/core/modules/views/src/ViewExecutable.php(1514): Drupal\views\ViewExecutable->execute(NULL)
#16 /var/lib/tugboat/stm/web/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php(2493): Drupal\views\ViewExecutable->render()
#17 /var/lib/tugboat/stm/web/core/modules/views/src/ViewExecutable.php(1722): Drupal\views\Plugin\views\display\DisplayPluginBase->preview()
#18 /var/lib/tugboat/stm/web/core/modules/views_ui/src/ViewUI.php(615): Drupal\views\ViewExecutable->preview('default', Array)
#19 /var/lib/tugboat/stm/web/core/modules/views_ui/src/ViewPreviewForm.php(63): Drupal\views_ui\ViewUI->renderPreview('default', Array)
#20 /var/lib/tugboat/stm/web/core/lib/Drupal/Core/Entity/EntityForm.php(107): Drupal\views_ui\ViewPreviewForm->form(Array, Object(Drupal\Core\Form\FormState))
#21 /var/lib/tugboat/stm/web/core/modules/views_ui/src/ViewFormBase.php(42): Drupal\Core\Entity\EntityForm->buildForm(Array, Object(Drupal\Core\Form\FormState))
#22 [internal function]: Drupal\views_ui\ViewFormBase->buildForm(Array, Object(Drupal\Core\Form\FormState), 'default')
#23 /var/lib/tugboat/stm/web/core/lib/Drupal/Core/Form/FormBuilder.php(528): call_user_func_array(Array, Array)
#24 /var/lib/tugboat/stm/web/core/lib/Drupal/Core/Form/FormBuilder.php(370): Drupal\Core\Form\FormBuilder->retrieveForm('view_preview_fo...', Object(Drupal\Core\Form\FormState))
#25 /var/lib/tugboat/stm/web/core/lib/Drupal/Core/Form/FormBuilder.php(625): Drupal\Core\Form\FormBuilder->rebuildForm('view_preview_fo...', Object(Drupal\Core\Form\FormState), Array)
#26 /var/lib/tugboat/stm/web/core/lib/Drupal/Core/Form/FormBuilder.php(321): Drupal\Core\Form\FormBuilder->processForm('view_preview_fo...', Array, Object(Drupal\Core\Form\FormState))
#27 /var/lib/tugboat/stm/web/core/lib/Drupal/Core/Controller/FormController.php(73): Drupal\Core\Form\FormBuilder->buildForm(Object(Drupal\views_ui\ViewPreviewForm), Object(Drupal\Core\Form\FormState))
#28 [internal function]: Drupal\Core\Controller\FormController->getContentResult(Object(Symfony\Component\HttpFoundation\Request), Object(Drupal\Core\Routing\RouteMatch))
#29 /var/lib/tugboat/stm/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(123): call_user_func_array(Array, Array)
#30 /var/lib/tugboat/stm/web/core/lib/Drupal/Core/Render/Renderer.php(593): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->{closure:Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber::wrapControllerExecutionInRenderContext():121}()
#31 /var/lib/tugboat/stm/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(121): Drupal\Core\Render\Renderer->executeInRenderContext(Object(Drupal\Core\Render\RenderContext), Object(Closure))
#32 /var/lib/tugboat/stm/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(97): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext(Array, Array)
#33 /var/lib/tugboat/stm/vendor/symfony/http-kernel/HttpKernel.php(183): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->{closure:Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber::onController():96}()
#34 /var/lib/tugboat/stm/vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1)
#35 /var/lib/tugboat/stm/web/core/lib/Drupal/Core/StackMiddleware/Session.php(53): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#36 /var/lib/tugboat/stm/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#37 /var/lib/tugboat/stm/web/core/lib/Drupal/Core/StackMiddleware/ContentLength.php(28): Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#38 /var/lib/tugboat/stm/web/core/modules/big_pipe/src/StackMiddleware/ContentLength.php(32): Drupal\Core\StackMiddleware\ContentLength->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#39 /var/lib/tugboat/stm/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(116): Drupal\big_pipe\StackMiddleware\ContentLength->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#40 /var/lib/tugboat/stm/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(90): Drupal\page_cache\StackMiddleware\PageCache->pass(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#41 /var/lib/tugboat/stm/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Drupal\page_cache\StackMiddleware\PageCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#42 /var/lib/tugboat/stm/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#43 /var/lib/tugboat/stm/web/core/lib/Drupal/Core/StackMiddleware/AjaxPageState.php(36): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#44 /var/lib/tugboat/stm/web/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\Core\StackMiddleware\AjaxPageState->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#45 /var/lib/tugboat/stm/web/core/lib/Drupal/Core/DrupalKernel.php(709): Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#46 /var/lib/tugboat/stm/web/index.php(19): Drupal\Core\DrupalKernel->handle(Object(Symfony\Component\HttpFoundation\Request))
#47 {main}

Thank you!

🐛 Bug report
Status

Active

Version

2.1

Component

Code

Created by

🇷🇴Romania gge

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

Comments & Activities

  • Issue created by @gge
  • 🇷🇴Romania gge

    The problematic line is:
    $event->getView()->filter[$id]->value['value'] = $value;

    Not sure if this is the right way to fix it, but the error doesn't show up anymore if we check if $event->getView()->filter[$id]->value is an array before trying to use it as an array:
    Replace line 68 with

          if (is_array($event->getView()->filter[$id]->value)) {
            $event->getView()->filter[$id]->value['value'] = $value;
          }
          else {
            $event->getView()->filter[$id]->value = $value;
          }  
    • jurgenhaas committed 0a864e12 on 3.0.x
      Issue #3508890 by gge, jurgenhaas: TypeError: Cannot access offset of...
  • Status changed to Needs review 8 days ago
  • 🇩🇪Germany jurgenhaas Gottmadingen

    It's a bit more complicated than this, unfortunately. There can be simple fields (e.g. the taxonomy name), or complex fields like a date or the taxonomy term, which provide their filter value in an array, using the key value for it. But there can also multi value filters, e.g. when using the operation "Is one of", then the filter array is indexed by integers.

    I have committed a fix to the 3.0.x branch, please review and test that one.

Production build 0.71.5 2024