data-simple-mega-menu attribute receives an array instead of a numeric IC

Created on 25 April 2024, about 1 year ago

Problem/Motivation

These lines are dirty as hell:

$menu_attributes = $url->getOption('attributes');
    $simple_mega_menu_id = $menu_attributes['data-simple-mega-menu'];
    /** @var \Drupal\simple_megamenu\Entity\SimpleMegaMenu $simple_mega_menu */
    $simple_mega_menu = $this->entityTypeManager->getStorage('simple_mega_menu')->load($simple_mega_menu_id);

and we deserve it's blown now.

Instead of the expected simple_mega_menu entity ID, we receive an array:

$simple_mega_menu_id array (2)
    ⇄0 => string (1) "2"
    ⇄1 => string (1) "2"

Steps to reproduce

Proposed resolution

Remaining tasks

User interface changes

API changes

Data model changes

🐛 Bug report
Status

Active

Version

2.0

Component

Code

Created by

🇩🇪Germany Anybody Porta Westfalica

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

Comments & Activities

  • Issue created by @Anybody
  • 🇩🇪Germany Anybody Porta Westfalica

    Let's find out where data-simple-mega-menu comes from!

  • 🇩🇪Germany Anybody Porta Westfalica

    Yeah comes from simple_mega_menu module:

    simple_megamenu.module:    $simple_mega_menu_id = isset($menu_link_options['attributes']['data-simple-mega-menu']) ? $menu_link_options['attributes']['data-simple-mega-menu'] : NULL;
    simple_megamenu.module:      'attributes' => [
    simple_megamenu.module:    if (isset($menu_link_options['attributes']['data-simple-mega-menu'])) {
    simple_megamenu.module:      unset($menu_link_options['attributes']['data-simple-mega-menu']);
    simple_megamenu.module:    $simple_mega_menu_id = isset($menu_link_options['attributes']['data-simple-mega-menu']) ? $menu_link_options['attributes']['data-simple-mega-menu'] : NULL;
    simple_megamenu.module:    if (isset($menu_link_options['attributes']['data-simple-mega-menu'])) {
    simple_megamenu.module:      unset($menu_link_options['attributes']['data-simple-mega-menu']);
    src/TwigExtension/SimpleMegaMenuTwigExtension.php:    $simple_mega_menu_id = $menu_attributes['data-simple-mega-menu'];
    src/TwigExtension/SimpleMegaMenuTwigExtension.php:    $menu_attributes = $url->getOption('attributes');
    src/TwigExtension/SimpleMegaMenuTwigExtension.php:    if (isset($menu_attributes['data-simple-mega-menu']) && !empty($menu_attributes['data-simple-mega-menu'])) {
    

    Now the question is, why it it an array suddenly...

  • 🇩🇪Germany Anybody Porta Westfalica

    Editing the referencing menu item is also broken, so this seems quite strange.

  • 🇩🇪Germany Anybody Porta Westfalica

    Okay the reason is that the referencing menu item has

    a:1:{s:10:"attributes";a:1:{s:21:"data-simple-mega-menu";a:2:{i:0;s:1:"2";i:1;s:1:"2";}}}
    

    which is an array, but a single data value would be expected. Still unclear how that can happen.

  • 🇩🇪Germany Anybody Porta Westfalica

    Here's the reason!

Production build 0.71.5 2024