Мне нужно добавить пользовательскую вкладку на странице профиля пользователя. Я определил свой маршрут, как показано ниже:
mymodule.routing.yml
mymodule.account:
path: '/user/{user}/custom'
defaults:
_form: '\Drupal\mymodule\Form\MyModuleUserSettingsForm'
_title: 'Custom Settings'
user: \d+
requirements:
_permission: 'access content'
mymodule.links.task.yml
mymodule.account:
title: Mymodule Settings
route_name: mymodule.account
base_route: entity.user.canonical
mymodule.links.menu.yml
mymodule.account:
title: My module Settings
parent: entity.user.canonical
route_name: mymodule.account
Затем после очистки кеш вкладка появляется на странице профиля. Но когда я открываю URL / user / 1 / custom, я вижу сообщение о том, что страница не найдена.
Ответы:
Ваша проблема в
mymodule.routing.yml
файле, большая проблема в местеuser: \d+
, эта строка должна быть подrequirements:
разделом, другая проблема - отступ. Итак, окончательный код должен быть:И, конечно, вам нужно определение класса формы в
src/Form/MyModuleUserSettingsForm.php
И
mymodule.info.yml
файл для завершения вашего модуля (в данном случае с именем mymodule)Справка: Структура маршрутов
источник
user:
ни ключ, ни то, куда он должен идти ... Возможно, документы должны быть улучшены / отредактированы? или я что то пропустил?Есть два способа загрузить форму, используя маршрут. Вы можете либо загрузить обратный вызов, который загружает форму и возвращает ее как часть массива сборки, либо вы можете загрузить форму напрямую, установив параметр _form в значение по умолчанию.
Вы можете выполнить поиск по базе кода, чтобы найти рабочие примеры, скопировать их в свой mymodule.routing.yml, отредактировать их в соответствии с вашими потребностями, а затем перестроить кеш.
Загрузка формы от обратного вызова:
В контактном модуле есть рабочий пример:
/core/modules/contact/contact.routing.yml
Затем в /core/modules/contact/src/Controller/ContactController.php
Вы можете увидеть пример того, как загрузить форму в обратном вызове:
Форма загрузки прямо с маршрута:
Если вы хотите загрузить форму напрямую, используя _form по умолчанию, в модуле ярлыков есть пример по адресу /core/modules/shortcut/shortcut.routing.yml
В этом случае пользователь передается в качестве параметра в форму, см. /Core/modules/shortcut/src/Form/SwitchShortcutSet.php
источник
Несколько вещей, которые я могу заметить ...
У вас есть ВСЕ, названное mymodule.account. Я бы немного разнообразил это. Подумайте об этом на странице задач:
Я также не верю, что вам нужно что-либо в меню для этого.
Между этими двумя вам должно быть хорошо идти! Не стесняйтесь обращаться ко мне напрямую, если вы не можете понять это, потому что я - ПРОСТО - заставил это работать на моем порте D8 Apply For Role!
источник
В modulename.routing.yml вы должны передать аргумент пользователя, как показано ниже
и в modulename.links.task.yml у вас есть код, как показано ниже
источник