Ich muss eine benutzerdefinierte Registerkarte in der Benutzerprofilseite hinzufügen. Ich habe meine Route wie folgt definiert:
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
Nach dem Löschen des Caches wird auf der Profilseite die Registerkarte angezeigt. Wenn ich jedoch die URL / user / 1 / custom öffne, wird die Meldung "Seite nicht gefunden" angezeigt.
Antworten:
Ihr Problem liegt in der
mymodule.routing.yml
Datei, das große Problem ist der Ortuser: \d+
, diese Zeile muss sich unter demrequirements:
Abschnitt befinden, das andere Problem ist der Einzug. Der endgültige Code sollte also lauten:Und natürlich benötigen Sie die Formularklassendefinition in
src/Form/MyModuleUserSettingsForm.php
Und eine
mymodule.info.yml
Datei zur Vervollständigung Ihres Moduls (in diesem Fall mymodule)Referenz: Struktur der Routen
quelle
user:
noch wohin er gehen soll ... Vielleicht müssen die Dokumente verbessert / bearbeitet werden? oder habe ich etwas verpasstEs gibt zwei Möglichkeiten, ein Formular über eine Route zu laden. Sie können entweder einen Rückruf laden, der ein Formular lädt und als Teil des Build-Arrays zurückgibt, oder Sie können das Formular direkt laden, indem Sie den Parameter _form unter den Standardeinstellungen festlegen.
Sie können die Codebasis durchsuchen, um Arbeitsbeispiele zu finden, sie in Ihre Datei mymodule.routing.yml kopieren, sie nach Ihren Wünschen bearbeiten und dann den Cache neu erstellen.
Formular vom Rückruf laden:
Im Kontaktmodul gibt es ein funktionierendes Beispiel:
/core/modules/contact/contact.routing.yml
Dann in /core/modules/contact/src/Controller/ContactController.php
Im Rückruf sehen Sie ein Beispiel zum Laden eines Formulars:
Formular direkt von der Route laden:
Wenn Sie das Formular direkt mit der Standardeinstellung _form laden möchten, finden Sie ein Beispiel im Verknüpfungsmodul unter /core/modules/shortcut/shortcut.routing.yml
In diesem Fall wird der Benutzer als Parameter an das Formular übergeben (siehe /core/modules/shortcut/src/Form/SwitchShortcutSet.php)
quelle
Ein paar Dinge, die ich sofort erkennen kann ...
Du hast ALLES mit dem Namen mymodule.account. Ich würde das ein bisschen diversifizieren. Ziehen Sie dies für die Aufgabenseite in Betracht:
Ich glaube auch nicht, dass Sie dafür etwas im Menü brauchen.
Zwischen diesen beiden sollten Sie gut zu gehen sein! Sie können sich gerne direkt an mich wenden, wenn Sie dies nicht herausfinden können, da ich - NUR - dies für meinen D8-Port von Apply For Role verwendet habe!
quelle
In modulename.routing.yml müssen Sie das Benutzerargument wie unten übergeben
und in modulename.links.task.yml haben Sie den Code wie unten
quelle