Existe uma maneira melhor de fazer isso. O que você deseja fazer é criar seu próprio plug-in e estender a classe MenuLinkDefault. O melhor lugar para procurar é o módulo Drupal / User, que fornece a implementação LoginLogoutMenuLink.
Você pode definir seu próprio plugin se quiser, por exemplo, alterar o texto ou a lógica. Como alternativa, você pode simplesmente apontar para o plug-in existente para economizar tempo e simplesmente colocar o implemento existente. Aqui está um exemplo de código:
Versão simples:
Versão avançada:
- Copie o plug-in para sua
my_module/src/Plugin/Menu/pasta
- Renomeie-o de LoginLogoutMenuLink para MyLoginLogoutMenuLink
- Atualize o espaço para nome para refletir sua localização, por exemplo
namespace Drupal\my_module\Plugin\Menu;
- No arquivo, mude
class LoginLogoutMenuLink extends MenuLinkDefaultparaclass MyLoginLogoutMenuLink extends MenuLinkDefault
- Crie um
my_module.links.menu.ymlcomo acima, mas certifique-se de nomear a classe como a nomeou agora e aponte-a para o seu módulo. Veja o exemplo abaixo.
Você my_module/src/Plugin/Menu/MyLoginLogoutMenuLink.phpdeve ter a seguinte aparência:
namespace Drupal\my_module\Plugin\Menu;
use Drupal\Core\Menu\MenuLinkDefault;
use Drupal\Core\Menu\StaticMenuLinkOverridesInterface;
use Drupal\Core\Session\AccountInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* A menu link that shows "Log in" or "Log out" as appropriate.
*/
class MyLoginLogoutMenuLink extends MenuLinkDefault {
...
Você my_module/my_module.links.menu.ymldeve ter a seguinte aparência:
my_module.logout:
weight: 10
menu_name: my-custom-menu
class: Drupal\my_module\Plugin\Menu\MyLoginLogoutMenuLink
Espero que isso ajude alguém.