Je dois ajouter un onglet personnalisé dans la page de profil utilisateur. J'ai défini mon itinéraire comme ci-dessous:
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
Ensuite, après l'effacement de l'onglet cache apparaît dans la page de profil. Mais lorsque j'ouvre l'url / user / 1 / custom, je vois le message de page introuvable.
Réponses:
Votre problème est dans le
mymodule.routing.yml
fichier, le gros problème est l'endroit oùuser: \d+
, cette ligne doit être sous larequirements:
section, l'autre problème est l'indentation. Le code final devrait donc être:Et bien sûr, vous avez besoin de la définition de classe de formulaire dans
src/Form/MyModuleUserSettingsForm.php
Et un
mymodule.info.yml
fichier pour compléter votre module (dans ce cas nommé mymodule)Référence: Structure des itinéraires
la source
user:
ni où elle doit aller ... Peut-être que les documents doivent être améliorés / édités? ou ai-je raté quelque chose?Il existe deux façons de charger un formulaire à l'aide d'un itinéraire. Vous pouvez soit charger un rappel qui charge un formulaire et le renvoie dans le cadre du tableau de génération, soit charger directement le formulaire en définissant le paramètre _form sous les valeurs par défaut.
Vous pouvez rechercher la base de code pour trouver des exemples de travail, les copier dans votre mymodule.routing.yml, les modifier selon vos besoins, puis reconstruire le cache.
Chargement du formulaire depuis le rappel:
Il y a un exemple de travail dans le module de contact:
/core/modules/contact/contact.routing.yml
Puis dans /core/modules/contact/src/Controller/ContactController.php
vous pouvez voir un exemple de chargement d'un formulaire dans le rappel:
Formulaire de chargement directement depuis l'itinéraire:
Si vous souhaitez charger le formulaire directement en utilisant le _form par défaut, il y a un exemple dans le module de raccourci à /core/modules/shortcut/shortcut.routing.yml
Dans ce cas, l'utilisateur est transmis en tant que paramètre au formulaire, voir /core/modules/shortcut/src/Form/SwitchShortcutSet.php
la source
Quelques choses que je peux repérer ...
Vous avez TOUT nommé mymodule.account. Je diversifierais un peu cela. Pensez à aller avec cela pour la page des tâches:
Je ne pense pas non plus que vous ayez besoin de quoi que ce soit dans le menu pour cela.
Entre ces deux, tu devrais être prêt à partir! N'hésitez pas à me contacter directement si vous ne pouvez pas comprendre cela parce que j'ai - JUSTE - réussi à le faire fonctionner sur mon port D8 de Apply For Role!
la source
Dans modulename.routing.yml, vous devez passer l'argument utilisateur comme ci-dessous
et dans modulename.links.task.yml vous avez le code comme ci-dessous
la source