J'essaie de créer un nouvel onglet personnalisé qui apparaît sur toutes les routes qui sont des descendants de l'entité. {Entity_type} .canonical. J'ai essayé d'étendre la classe DeriverBase, en remplaçant spécifiquement la méthode getDerivativeDefinitions. J'ai créé l'onglet lui-même en étendant LocalTaskDefault et en remplaçant la méthode getRouteParameters. L'onglet apparaît lorsque vous visitez un chemin utilisateur Drupal standard tel que www.mysite.com/user/1/ ou www.mysite.com/user/1/edit. Cependant, lorsque nous ajoutons nos nouveaux itinéraires utilisateur personnalisés tels que www.mysite.com/user/1/subscribe, aucun onglet n'apparaît. Existe-t-il un moyen spécial de définir des tâches de menu local sur des itinéraires personnalisés? Un exemple du code:
$this->derivatives['recurly.subscription_tab'] = [
'title' => $this->t('Subscription'),
'weight' => 5,
'route_name' => 'recurly.subscription_list',
'base_route' => "entity.$entity_type.canonical",
];
foreach ($this->derivatives as &$entry) {
$entry += $base_plugin_definition;
}
Merci d'avance pour toute aide.
Réponses:
Comme suggéré par Berdir, vous pouvez regarder le module Devel et comment il l'implémente. Le code suivant a été "extrait" de Devel
1) Créez les itinéraires
Créez le fichier mymodule.routing.yml dans et à l'intérieur définissez un rappel de route (qui est utilisé pour créer les routes dynamiques)
Créez la classe MyModuleRoutes pour générer vos routes dynamiques dans src / Routing
2) Créez les tâches locales dynamiques
Créez le fichier mymodule.links.task.yml et définissez à l'intérieur un dérivé
Créez la classe MyModuleLocalTasks pour générer vos routes dynamiques dans src / Plugin / Derivative
3) Créez le contrôleur
Créez la classe MyModuleController dans src / Controller
la source