Deprecated function warning when add menu position PHP 8.1

Created on 6 September 2022, about 2 years ago
Updated 29 May 2023, over 1 year ago

Problem/Motivation

In the form of adding a new rule of "Menu Position", when adding without filling the menu parent field, the following errors appear:

Deprecated function: explode(): Passing null to parameter #2 ($string) of type string is deprecated na Drupal\menu_position\Form\MenuPositionRuleForm->validateForm() (linha 249 de /var/www/html/web/modules/contrib/menu_position/src/Form/MenuPositionRuleForm.php)
#0 /var/www/html/web/core/includes/bootstrap.inc(347): _drupal_error_handler_real(8192, 'explode(): Pass...', '/var/www/html/w...', 249)
#1 [internal function]: _drupal_error_handler(8192, 'explode(): Pass...', '/var/www/html/w...', 249)
#2 /var/www/html/web/modules/contrib/menu_position/src/Form/MenuPositionRuleForm.php(249): explode(':', NULL)
...
Warning: Undefined array key 1 na Drupal\menu_position\Form\MenuPositionRuleForm->validateForm() (linha 249 de /var/www/html/web/modules/contrib/menu_position/src/Form/MenuPositionRuleForm.php)
#0 /var/www/html/web/core/includes/bootstrap.inc(347): _drupal_error_handler_real(2, 'Undefined array...', '/var/www/html/w...', 249)
#1 /var/www/html/web/modules/contrib/menu_position/src/Form/MenuPositionRuleForm.php(249): _drupal_error_handler(2, 'Undefined array...', '/var/www/html/w...', 249)
#2 [internal function]: Drupal\menu_position\Form\MenuPositionRuleForm->validateForm(Array, Object(Drupal\Core\Form\FormState))
#3 /var/www/html/web/core/lib/Drupal/Core/Form/FormValidator.php(82): call_user_func_array(Array, Array)
#4 /var/www/html/web/core/lib/Drupal/Core/Form/FormValidator.php(275): Drupal\Core\Form\FormValidator->executeValidateHandlers(Array, Object(Drupal\Core\Form\FormState))
#5 /var/www/html/web/core/lib/Drupal/Core/Form/FormValidator.php(118): Drupal\Core\Form\FormValidator->doValidateForm(Array, Object(Drupal\Core\Form\FormState), 'menu_position_r...')
#6 /var/www/html/web/core/lib/Drupal/Core/Form/FormBuilder.php(588): Drupal\Core\Form\FormValidator->validateForm('menu_position_r...', Array, Object(Drupal\Core\Form\FormState))
#7 /var/www/html/web/core/lib/Drupal/Core/Form/FormBuilder.php(320): Drupal\Core\Form\FormBuilder->processForm('menu_position_r...', Array, Object(Drupal\Core\Form\FormState))

Steps to reproduce

On the add a new rule page of "Menu Position" (/admin/structure/menu-position/add), add a rule without filling in the parent menu field.

Proposed resolution

Make validations so that NULL is not returned inside functions.
Referenced Code

/**
  * {@inheritdoc}
  */
public function validateForm(array &$form, FormStateInterface $form_state) {
  // Don't allow the user to select a menu name instead of a menu item.
  list($menu_name, $parent) = array_filter(explode(':', $form_state->getValue('parent') ?? "")) ?: [NULL, NULL];

  if (empty($parent)) {
    $form_state->setErrorByName('parent', $this->t('Please select a menu item. You have selected the name of a menu.'));
  }
  ...
}

Remaining tasks

None.

User interface changes

None.

API changes

None.

Data model changes

None.

🐛 Bug report
Status

Fixed

Version

1.0

Component

Code

Created by

🇵🇹Portugal lolgm

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

Comments & Activities

Not all content is available!

It's likely this issue predates Contrib.social: some issue and comment data are missing.

Production build 0.71.5 2024