Necesito agregar una pestaña personalizada en la página de perfil de usuario. Definí mi ruta como a continuación:
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
Luego, después de que aparece la pestaña borrar caché en la página de perfil. Pero cuando abro la url / user / 1 / custom veo el mensaje de página no encontrada.
Respuestas:
Su problema está en el
mymodule.routing.yml
archivo, el gran problema es el lugaruser: \d+
, esta línea debe estar debajo de larequirements:
sección, el otro problema es la sangría. Entonces el código final debería ser:Y, por supuesto, necesita la definición de clase de formulario en
src/Form/MyModuleUserSettingsForm.php
Y un
mymodule.info.yml
archivo para completar su módulo (en este caso llamado mymodule)Referencia: Estructura de rutas.
fuente
user:
ni a dónde debería ir ... ¿Quizás los documentos necesitan ser mejorados / editados? o me perdí algo?Hay dos formas de cargar un formulario utilizando una ruta. Puede cargar una devolución de llamada que carga un formulario y lo devuelve como parte de la matriz de compilación, o puede cargar el formulario directamente configurando el parámetro _form en los valores predeterminados.
Puede buscar en la base de código para encontrar ejemplos de trabajo, copiarlos en su mymodule.routing.yml, editarlos según sus necesidades y luego reconstruir el caché.
Cargando formulario de devolución de llamada:
Hay un ejemplo de trabajo en el módulo de contacto:
/core/modules/contact/contact.routing.yml
Luego en /core/modules/contact/src/Controller/ContactController.php
Puede ver un ejemplo de cómo cargar un formulario en la devolución de llamada:
Cargando formulario directamente desde la ruta:
Si desea cargar el formulario directamente utilizando el _form predeterminado, hay un ejemplo en el módulo de acceso directo en /core/modules/shortcut/shortcut.routing.yml
En este caso, el usuario se pasa como un parámetro al formulario, consulte /core/modules/shortcut/src/Form/SwitchShortcutSet.php
fuente
Algunas cosas que puedo detectar de la mano ...
Tienes TODO llamado mymodule.account. Lo diversificaría un poco. Considere ir con esto para la página de tareas:
Tampoco creo que necesites nada en el menú para esto.
¡Entre esos dos, deberías estar listo! ¡Siéntase libre de comunicarse conmigo directamente si no puede resolver esto porque, SOLO, conseguí que esto funcione en mi puerto D8 de Solicitud de rol!
fuente
En modulename.routing.yml debe pasar el argumento del usuario como a continuación
y en modulename.links.task.yml tienes el código como a continuación
fuente