Estoy intentando crear una nueva pestaña personalizada que aparece en todas las rutas que son descendientes de la entidad. {Entity_type} .canonical. Intenté extender la clase DeriverBase, anulando específicamente el método getDerivativeDefinitions. Creé la pestaña misma extendiendo LocalTaskDefault y anulando el método getRouteParameters. La pestaña aparece cuando visita una ruta de usuario estándar de Drupal como www.mysite.com/user/1/ o www.mysite.com/user/1/edit. Sin embargo, cuando agregamos nuestras nuevas rutas de usuario personalizadas, como www.mysite.com/user/1/subscribe, no aparecen pestañas. ¿Existe una forma especial de definir tareas de menú local en rutas personalizadas? Una muestra del código:
$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;
}
Gracias de antemano por cualquier ayuda.
Respuestas:
Según lo sugerido por Berdir, puede ver el módulo Devel y cómo está implementando eso. El siguiente código fue "extraído" de Devel
1) Crea las rutas
Cree el archivo mymodule.routing.yml dentro y defina una devolución de llamada de ruta (que se utiliza para crear las rutas dinámicas)
Cree la clase MyModuleRoutes para generar sus rutas dinámicas en src / Routing
2) Crear las tareas locales dinámicas
Cree el archivo mymodule.links.task.yml y dentro defina un derivador
Cree la clase MyModuleLocalTasks para generar sus rutas dinámicas en src / Plugin / Derivative
3) Crear el controlador
Cree la clase MyModuleController en src / Controller
fuente