When trying to update an existing menu link URL/ URI with updateDefinition() -


It's noticed the url is not getting updated. Other key such as 'title', 'menu_name', 'description', 'enabled' etc gets updated.

This is expected as these are the keys that are allowed to override. I'm trying to override a url or route of an existing menu item. Is there any other way I can achieve this? Below is my current implementation -

$menu_name = 'custom';
$menu_tree = \Drupal::menuTree();
$parameters = $menu_tree->getCurrentRouteMenuTreeParameters($menu_name);

$tree = $menu_tree->load($menu_name, $parameters);
$manipulators = array(
  array('callable' => 'menu.default_tree_manipulators:checkAccess'),
  array('callable' => 'menu.default_tree_manipulators:generateIndexAndSort'),
$tree = $menu_tree->transform($tree, $manipulators);

foreach ($tree as $item) {
  //update existing menu item.
        'enabled'=> 0,
        'title'=>'new name',
        'link' => ['uri' => 'internal:/node/1000'],  //Need to update to a new internal url.
        'menu_name' => 'custom',


I'm open for any suggestions/ ideas. Thanks!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.