Muszę dodać niestandardową kartę na stronie profilu użytkownika. Swoją trasę zdefiniowałem jak poniżej:
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
Następnie po wyczyszczeniu pamięci podręcznej karta pojawia się na stronie profilu. Ale po otwarciu adresu URL / użytkownika / 1 / niestandardowego widzę komunikat o nieznalezieniu strony.
Odpowiedzi:
Twój problem znajduje się w
mymodule.routing.yml
pliku, dużym problemem jest miejsceuser: \d+
, ta linia musi znajdować się podrequirements:
sekcją, drugim problemem jest wcięcie. Zatem końcowy kod powinien być:I oczywiście potrzebujesz definicji klasy formularza w
src/Form/MyModuleUserSettingsForm.php
I
mymodule.info.yml
plik do uzupełnienia modułu (w tym przypadku o nazwie mymodule)Odniesienie: Struktura tras
źródło
user:
ani o tym, dokąd powinna iść ... Może dokumenty powinny być poprawione / edytowane? czy coś mi umknęło?Istnieją dwa sposoby ładowania formularza przy użyciu trasy. Możesz albo załadować wywołanie zwrotne, które ładuje formularz i zwraca go jako część tablicy kompilacji, albo możesz załadować formularz bezpośrednio, ustawiając parametr _form w ustawieniach domyślnych.
Możesz przeszukać bazę kodów, aby znaleźć działające przykłady, skopiować je do pliku mymodule.routing.yml, edytować je zgodnie z potrzebami, a następnie odbudować pamięć podręczną.
Ładowanie formularza z oddzwaniania:
W module kontaktowym znajduje się działający przykład:
/core/modules/contact/contact.routing.yml
Następnie w /core/modules/contact/src/Controller/ContactController.php
możesz zobaczyć przykład ładowania formularza w wywołaniu zwrotnym:
Ładowanie formularza bezpośrednio z trasy:
Jeśli chcesz załadować formularz bezpośrednio przy użyciu wartości domyślnej _form, istnieje przykład w module skrótów na /core/modules/shortcut/shortcut.routing.yml
W takim przypadku użytkownik jest przekazywany jako parametr do formularza, patrz /core/modules/shortcut/src/Form/SwitchShortcutSet.php
źródło
Kilka rzeczy, które mogę dostrzec z ręki ...
Masz WSZYSTKO o nazwie mymodule.account. Zróżnicuję to trochę. Zastanów się nad tym, aby przejść do strony zadań:
Nie wierzę też, że do tego potrzebujesz niczego w menu.
Pomiędzy tymi dwoma powinieneś być dobry! Skontaktuj się ze mną bezpośrednio, jeśli nie możesz tego rozgryźć, ponieważ - JUST - zmusiłem to do pracy na moim porcie D8 w aplikacji Apply for Role!
źródło
W modulename.routing.yml musisz przekazać argument użytkownika jak poniżej
a w modulename.links.task.yml masz kod jak poniżej
źródło