Preciso adicionar uma guia personalizada na página de perfil do usuário. Eu defini minha rota como abaixo:
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
Depois que a guia Limpar cache aparecer na página de perfil. Mas quando abro a URL / user / 1 / custom , vejo a mensagem Página não encontrada.
Respostas:
Seu problema está no
mymodule.routing.yml
arquivo, o grande problema é o local deuser: \d+
, esta linha deve estar narequirements:
seção, o outro problema é o recuo. Portanto, o código final deve ser:E é claro que você precisa da definição da classe de formulário em
src/Form/MyModuleUserSettingsForm.php
E um
mymodule.info.yml
arquivo para concluir seu módulo (neste caso, chamado mymodule)Referência: Estrutura de rotas
fonte
user:
nem para onde deve ir ... Talvez os documentos precisem ser aprimorados / editados? ou eu perdi alguma coisa?Existem duas maneiras de carregar um formulário usando uma rota. Você pode carregar um retorno de chamada que carrega um formulário e o retorna como parte da matriz de compilação ou pode carregar o formulário diretamente, definindo o parâmetro _form nos padrões.
Você pode pesquisar na base de código para encontrar exemplos de trabalho, copiá-los em seu mymodule.routing.yml, editá-los de acordo com suas necessidades e depois reconstruir o cache.
Carregando formulário a partir do retorno de chamada:
Há um exemplo de trabalho no módulo de contato:
/core/modules/contact/contact.routing.yml
Em seguida, em /core/modules/contact/src/Controller/ContactController.php
você pode ver um exemplo de como carregar um formulário no retorno de chamada:
Carregando formulário diretamente da rota:
Se você deseja carregar o formulário diretamente usando o padrão _form, há um exemplo no módulo de atalho em /core/modules/shortcut/shortcut.routing.yml
Nesse caso, o usuário é passado como parâmetro para o formulário, consulte /core/modules/shortcut/src/Form/SwitchShortcutSet.php
fonte
Algumas coisas que posso ver de imediato ...
Você tem TUDO chamado mymodule.account. Eu diversificaria isso um pouco. Considere ir com isso para a página de tarefas:
Também não acredito que você precise de algo no menu para isso.
Entre esses dois, você deve estar pronto! Sinta-se à vontade para entrar em contato diretamente comigo se você não conseguir descobrir isso porque eu - APENAS-- fiz isso funcionar na minha porta D8 do Apply For Role!
fonte
Em modulename.routing.yml, você deve passar o argumento do usuário como abaixo
e em modulename.links.task.yml você tem o código como abaixo
fonte