Problem/Motivation

MenuLinkManager::updateDefinition() currently saves the menu link entity before updating the menu tree when $persist is TRUE. This ordering causes entity hooks (e.g., pathauto's hook_entity_update) to fire while the menu tree still contains stale parent/child data. Modules that react to menu link entity saves and query the menu tree (like Pathauto for URL alias generation) receive incorrect tree information, leading to wrong menu hierarchy or broken path aliases.

Steps to reproduce

Create a parent-child menu link hierarchy using MenuLinkContent entities
Install a module (e.g., Pathauto) that implements hook_entity_update on menu_link_content and reads the menu tree
Call MenuLinkManager::updateDefinition() to change a child link's parent with $persist = TRUE
Observe that the entity hook fires before the tree is updated — the hook sees the old tree structure

Proposed resolution

In MenuLinkManager::updateDefinition(), change the order of operations:

Call updateLink() with $persist = FALSE first — this updates the in-memory definition without persisting the entity
Save the tree via MenuTreeStorage::save() with the updated definition
If the original $persist was TRUE, call updateLink() again with $persist = TRUE to persist the entity
This ensures the menu tree is always updated before entity hooks fire, so any hook (Pathauto or otherwise) that queries the tree during entity save sees the correct, updated hierarchy.

Issue fork drupal-3181070

Command icon Show commands

Start within a Git clone of the project using the version control instructions.

Or, if you do not have SSH keys set up on git.drupalcode.org:

Comments

sylvain lavielle created an issue. See original summary.

sylvain lavielle’s picture

Here's a patch.

Disclaimer : This is a quick fix approach, I'm really aware that the proper solution would be more tricky. But this worked for me in conjunction with https://www.drupal.org/project/pathauto/issues/3016532#comment-13885277. It can be a valid workaround for people the time pathauto and possibly drupal core reach a perfect solution about this issue

simon georges’s picture

Status: Active » Needs review

Changing status to "Needs review", as there is a patch.

Version: 9.2.x-dev » 9.3.x-dev

Drupal 9.2.0-alpha1 will be released the week of May 3, 2021, which means new developments and disruptive changes should now be targeted for the 9.3.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

mr.york’s picture

Status: Needs review » Reviewed & tested by the community

Thank you! Good patch.

catch’s picture

Category: Feature request » Task
Status: Reviewed & tested by the community » Needs work
Issue tags: +Needs tests, +Needs issue summary update

As explained by the patch author in #2 this isn't a committable patch - it might point to something going wrong, or there might be an alternative fix for pathauto.

Version: 9.3.x-dev » 9.4.x-dev

Drupal 9.3.0-rc1 was released on November 26, 2021, which means new developments and disruptive changes should now be targeted for the 9.4.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.4.x-dev » 9.5.x-dev

Drupal 9.4.0-alpha1 was released on May 6, 2022, which means new developments and disruptive changes should now be targeted for the 9.5.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.5.x-dev » 10.1.x-dev

Drupal 9.5.0-beta2 and Drupal 10.0.0-beta2 were released on September 29, 2022, which means new developments and disruptive changes should now be targeted for the 10.1.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 10.1.x-dev » 11.x-dev

Drupal core is moving towards using a “main” branch. As an interim step, a new 11.x branch has been opened, as Drupal.org infrastructure cannot currently fully support a branch named main. New developments and disruptive changes should now be targeted for the 11.x branch, which currently accepts only minor-version allowed changes. For more information, see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 11.x-dev » main

Drupal core is now using the main branch as the primary development branch. New developments and disruptive changes should now be targeted to the main branch.

Read more in the announcement.

marckwee’s picture

StatusFileSize
new1.16 KB

Hi,

We still needed this patch and we are upgrading to D11, so here an new version. It is the same patch logic wise.

It still goes "wrong" when you manually drag-drop menu items, this patch should fix that.

phthlaap made their first commit to this issue’s fork.

phthlaap’s picture

Status: Needs work » Needs review
smustgrave’s picture

Status: Needs review » Needs work

Issue summary tag is still relevant.

Please reach full issue and tags before moving to review

phthlaap’s picture

Issue summary: View changes
phthlaap’s picture

Status: Needs work » Needs review