I have two routes that receive user as route parameter, and i need a menu link for every one in account menu. So I added in my *links.menu.yml
client_account_links: deriver: Drupalmy_modulePluginMenuCustomLinksClientMenuLinksDerivative class: Drupalmy_modulePluginMenuCustomMenuLink
And I created my CustomMenuLink class in my_module/src/Plugin/Menu with
<?php namespace Drupalmy_modulePluginMenu; use DrupalCoreMenuMenuLinkDefault; /** * A menu link that cache by user context. */ class CustomMenuLink extends MenuLinkDefault { public function getCacheMaxAge() { return 0; } public function getCacheContexts() { return ['user']; } }
And my ClientMenuLinksDerivative has:
<?php namespace Drupalmy_modulePluginMenuCustomLinks; use DrupalComponentPluginDerivativeDeriverBase; use DrupalCorePluginDiscoveryContainerDeriverInterface; use SymfonyComponentDependencyInjectionContainerInterface; use DrupalCoreSessionAccountInterface; use DrupalCoreSessionAccountProxy; use DrupaluserEntityUser; use DrupalpersonasPersonaUtility; class ClientMenuLinksDerivative extends DeriverBase implements ContainerDeriverInterface { protected $account; protected $uid; public function __construct(AccountProxy $current_user) { $this->uid = $current_user->id(); $this->account = User::load($current_user->id()); } public static function create(ContainerInterface $container, $base_plugin_id) { return new static( $container->get('current_user') ); } public function getDerivativeDefinitions($base_plugin_definition) { $links = array(); if (PersonaUtility::hasPersona($this->account, 'cliente_konsey')) { $links['contratos_cliente'] = [ 'title' => 'Contratos', 'description' => 'Mis Contratos', 'menu_name' => 'account', 'weight' => 3, 'route_name' => 'page_manager.page_view_mis_contratos_mis_contratos-panels_variant-0', 'route_parameters' => ['user' => $this->uid] ] + $base_plugin_definition; $links['solicitudes_cliente'] = [ 'title' => 'Solicitudes', 'description' => 'Mis solicitudes', 'menu_name' => 'account', 'weight' => 4, 'route_name' => 'page_manager.page_view_mis_solicitudes_mis_solicitudes-panels_variant-0', 'route_parameters' => ['user' => $this->uid] ] + $base_plugin_definition; } return $links; }
}
This create my menu links in the account menu but the route parameter always is the same, so if I change user, the links send me to another user page, the user that run the code before that cached.
My question is how I can create custom menu links, with route parameters (user in my case), and the links change by user? because this don’t work. Also I tried with hook_menu_links_discovered_alter(), but without lucky.