Добавить ссылку в меню
Теперь, когда мы создали заполнитель для нашей страницы настроек модуля, давайте добавим ссылку для меню. В приведенных ниже инструкциях показано, как создать ссылку меню на модуль hello_world в разделе «Разработка» на странице «Администратор> Конфигурация» (http://example.com/admin/config).
В корневой папке вашего модуля создайте новый файл с именем hello_world.links.menu.yml и добавьте в него следующее:
hello_world.admin: title: 'Hello module settings' description: 'example of how to make an admin settings page link' parent: system.admin_config_development route_name: hello_world.content weight: 100
Обратите внимание, что первая строка резервирует именованное пространство, как в нашем примере файла маршрутизации. Также обратите внимание на использование нашего имени маршрута в 5-й строке (мы используем именованное пространство из первой строки примера файла маршрутизации). Название и описание будут отображаться в разделе «Разработка». Обратите внимание, что родительская строка описывает родительскую ссылку для меню. Другими словами, ссылка на меню будет создана под admin, config, development.
Это добавит ссылку на путь, указанный в hello_world.content (в данном примере hello_world.routing.yml) на страницах администрирования вашего сайта на вкладке «Конфигурация» (URL-адрес/admin/config) в разделе «Разработка». Конечно, вам нужно будет очистить кэш, чтобы изменения вступили в силу.
После очистки кеша вы найдете ссылку меню «Настройки модуля Hello» в разделе «Разработка» страницы конфигурации. При нажатии на ссылку будет вызван модуль hello_world.
Дополнительные советы
Файл .links.menu.yml довольно гибкий. Вы также можете использовать его для ссылки на внешние ресурсы или по ссылке:
hello_world.admin: title: 'Hello module settings' description: 'example of how to make an admin settings page link' parent: system.admin_config_development url: http://example.com/this-is-some-example weight: 100 hello_world.admin2: title: 'Hello module settings' description: 'example of how to make an admin settings page link' parent: system.admin_config_development url: internal:/some-internal-path
Недоступно для редактирования:
Обратите внимание, что когда вы создаете ссылки на меню с помощью yml-файлов и пользовательских модулей таким образом, вы получаете не редактируемые ссылки меню пользовательского интерфейса. Вы можете изменить ссылки только через файл yml. Они считаются управляемыми модулями, а не административными. Когда вы нажимаете кнопку редактирования для пункта меню, вы получаете сообщение «Эта ссылка предоставляется модулем XXX. Заголовок и путь не могут быть отредактированы».

Чтобы создать редактируемые ссылки меню, вам нужно сделать это примерно так:
$my_menu = \Drupal::entityTypeManager()->getStorage('menu_link_content')
->loadByProperties(['menu_name' => 'my-menu-name']);
foreach ($my_menu as $menu_item) {
$parent_id = $menu_item->getParentId();
if (!empty($parent_id)) {
$top_level = $parent_id;
break;
}
}
$menu_link = MenuLinkContent::create([
'title' => 'My menu link title',
'link' => ['uri' => 'internal:/my/path'],
'menu_name' => 'my-menu-name',
'parent' => $top_level,
'expanded' => TRUE,
'weight' => 0,
]);
$menu_link->save();