diff --git a/core/modules/menu_link_content/menu_link_content.install b/core/modules/menu_link_content/menu_link_content.install index c31536b..43c75ec 100644 --- a/core/modules/menu_link_content/menu_link_content.install +++ b/core/modules/menu_link_content/menu_link_content.install @@ -9,7 +9,10 @@ * Implements hook_install(). */ function menu_link_content_install() { - // Add a higher weight so that menu_link_content_path_update comes after - // system_path_uodate(). + // Add a higher weight so that menu_link_content_path_update() is called after + // system_path_update() clears the path alias cache. + // @todo remove this when the cache clearing is moved to path module or if + // caching is removed for path aliases due to + // https://www.drupal.org/node/1965074 module_set_weight('menu_link_content', 1); } diff --git a/core/modules/menu_link_content/menu_link_content.module b/core/modules/menu_link_content/menu_link_content.module index 1c8eb85..19cf84d 100644 --- a/core/modules/menu_link_content/menu_link_content.module +++ b/core/modules/menu_link_content/menu_link_content.module @@ -55,7 +55,7 @@ function _menu_link_content_update_path_alias($path) { /** @var \Drupal\Core\Menu\MenuLinkManagerInterface $menu_link_manager */ $menu_link_manager = \Drupal::service('plugin.manager.menu.link'); // @todo Use link.uri once https://www.drupal.org/node/2391217 is in. - /* @var $entities \Drupal\menu_link_content\MenuLinkContentInterface[] */ + /** @var \Drupal\menu_link_content\MenuLinkContentInterface[] $entities */ $entities = \Drupal::entityManager() ->getStorage('menu_link_content') ->loadByProperties(['link__uri' => 'user-path:' . $path]); @@ -73,11 +73,8 @@ function menu_link_content_path_update($path) { _menu_link_content_update_path_alias($path['alias']); _menu_link_content_update_path_alias($path['original']['alias']); } - - if ($path['source'] != $path['original']['source']) { + elseif ($path['source'] != $path['original']['source']) { _menu_link_content_update_path_alias($path['alias']); - _menu_link_content_update_path_alias($path['source']); - _menu_link_content_update_path_alias($path['original']['source']); } } diff --git a/core/modules/menu_link_content/src/Tests/PathAliasMenuLinkContentTest.php b/core/modules/menu_link_content/src/Tests/PathAliasMenuLinkContentTest.php index 4e04ec6..78fe0e3 100644 --- a/core/modules/menu_link_content/src/Tests/PathAliasMenuLinkContentTest.php +++ b/core/modules/menu_link_content/src/Tests/PathAliasMenuLinkContentTest.php @@ -59,12 +59,12 @@ public function testPathAliasChange() { /** @var \Drupal\Core\Path\AliasStorageInterface $path_alias_storage */ $path_alias_storage = \Drupal::service('path.alias_storage'); - $alias = $path_alias_storage->save('test-page', 'destination'); + $alias = $path_alias_storage->save('test-page', 'my-blog'); $pid = $alias['pid']; $menu_link_content = MenuLinkContent::create([ 'title' => 'Menu title', - 'link' => ['uri' => 'user-path:destination'], + 'link' => ['uri' => 'user-path:my-blog'], 'menu_name' => 'tools', ]); $menu_link_content->save(); @@ -73,7 +73,7 @@ public function testPathAliasChange() { $this->assertEqual('test_page_test.test_page', $tree[$menu_link_content->getPluginId()]->link->getPluginDefinition()['route_name']); // Saving an alias should clear the alias manager cache. - $path_alias_storage->save('test-render-title', 'destination', LanguageInterface::LANGCODE_NOT_SPECIFIED, $pid); + $path_alias_storage->save('test-render-title', 'my-blog', LanguageInterface::LANGCODE_NOT_SPECIFIED, $pid); $tree = \Drupal::menuTree()->load('tools', new MenuTreeParameters()); $this->assertEqual('test_page_test.render_title', $tree[$menu_link_content->getPluginId()]->link->getPluginDefinition()['route_name']); @@ -83,7 +83,8 @@ public function testPathAliasChange() { $tree = \Drupal::menuTree()->load('tools', new MenuTreeParameters()); $this->assertTrue(isset($tree[$menu_link_content->getPluginId()])); $this->assertEqual('', $tree[$menu_link_content->getPluginId()]->link->getRouteName()); - $this->assertEqual('base:destination', $tree[$menu_link_content->getPluginId()]->link->getUrlObject()->getUri()); + // Verify the plugin now references a path that does not match any route. + $this->assertEqual('base:my-blog', $tree[$menu_link_content->getPluginId()]->link->getUrlObject()->getUri()); } }