function PathAliasMenuLinkContentTest::testPathAliasChange
Same name and namespace in other branches
- 11.x core/modules/menu_link_content/tests/src/Kernel/PathAliasMenuLinkContentTest.php \Drupal\Tests\menu_link_content\Kernel\PathAliasMenuLinkContentTest::testPathAliasChange()
- 10 core/modules/menu_link_content/tests/src/Kernel/PathAliasMenuLinkContentTest.php \Drupal\Tests\menu_link_content\Kernel\PathAliasMenuLinkContentTest::testPathAliasChange()
- 9 core/modules/menu_link_content/tests/src/Kernel/PathAliasMenuLinkContentTest.php \Drupal\Tests\menu_link_content\Kernel\PathAliasMenuLinkContentTest::testPathAliasChange()
- 8.9.x core/modules/menu_link_content/tests/src/Kernel/PathAliasMenuLinkContentTest.php \Drupal\Tests\menu_link_content\Kernel\PathAliasMenuLinkContentTest::testPathAliasChange()
Tests the path aliasing changing.
File
-
core/
modules/ menu_link_content/ tests/ src/ Kernel/ PathAliasMenuLinkContentTest.php, line 53
Class
- PathAliasMenuLinkContentTest
- Ensures that the menu tree adapts to path alias changes.
Namespace
Drupal\Tests\menu_link_content\KernelCode
public function testPathAliasChange() : void {
$path_alias = $this->createPathAlias('/test-page', '/my-blog');
$menu_link_content = MenuLinkContent::create([
'title' => 'Menu title',
'link' => [
'uri' => 'internal:/my-blog',
],
'menu_name' => 'tools',
]);
$menu_link_content->save();
$tree = \Drupal::menuTree()->load('tools', new MenuTreeParameters());
$this->assertEquals('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->setPath('/test-render-title');
$path_alias->setAlias('/my-blog');
$path_alias->save();
$tree = \Drupal::menuTree()->load('tools', new MenuTreeParameters());
$this->assertEquals('test_page_test.render_title', $tree[$menu_link_content->getPluginId()]->link
->getPluginDefinition()['route_name']);
// Delete the alias.
$path_alias->delete();
$tree = \Drupal::menuTree()->load('tools', new MenuTreeParameters());
$this->assertTrue(isset($tree[$menu_link_content->getPluginId()]));
$this->assertEquals('', $tree[$menu_link_content->getPluginId()]->link
->getRouteName());
// Verify the plugin now references a path that does not match any route.
$this->assertEquals('base:my-blog', $tree[$menu_link_content->getPluginId()]->link
->getUrlObject()
->getUri());
// An entity can exist while its definition is absent from the menu tree
// (e.g. during content import, or before the tree has been rebuilt). Saving
// an alias matching its internal path should not throw an exception, and
// must not re-add the missing definition.
$menu_link_manager = \Drupal::service('plugin.manager.menu.link');
$plugin_id = $menu_link_content->getPluginId();
$menu_link_manager->removeDefinition($plugin_id, FALSE);
$this->assertFalse($menu_link_manager->hasDefinition($plugin_id));
$path_alias = $this->createPathAlias('/test-page', '/my-blog');
$this->assertNotNull($path_alias->id());
$this->assertFalse($menu_link_manager->hasDefinition($plugin_id));
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.