Usiłuję utworzyć nową kartę niestandardową, która będzie wyświetlana na wszystkich trasach, które są potomkami bytu. {Entity_type} .canonical. Próbowałem rozszerzyć klasę DeriverBase, w szczególności przesłaniając metodę getDerivativeDefinitions. Kartę utworzyłem, rozszerzając LocalTaskDefault i przesłaniając metodę getRouteParameters. Zakładka pojawia się, gdy odwiedzasz standardową ścieżkę użytkownika Drupal, taką jak www.mysite.com/user/1/ lub www.mysite.com/user/1/edit. Jednak gdy dodamy nasze nowe niestandardowe trasy użytkowników, takie jak www.mysite.com/user/1/subscribe, nie pojawią się żadne zakładki. Czy istnieje specjalny sposób definiowania zadań menu lokalnego na niestandardowych trasach? Próbka kodu:
$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;
}
Z góry dziękuję za wszelką pomoc.
Odpowiedzi:
Jak sugeruje Berdir, możesz przyjrzeć się modułowi Devel i sposobowi jego implementacji. Poniższy kod został „wyodrębniony” z Devel
1) Utwórz trasy
Utwórz plik mymodule.routing.yml wewnątrz i wewnątrz zdefiniuj wywołanie zwrotne trasy (które jest używane do tworzenia tras dynamicznych)
Utwórz klasę MyModuleRoutes, aby wygenerować dynamiczne trasy w src / Routing
2) Utwórz dynamiczne zadania lokalne
Utwórz plik mymodule.links.task.yml, a wewnątrz zdefiniuj pochodną
Utwórz klasę MyModuleLocalTasks, aby wygenerować dynamiczne trasy w src / Plugin / Derivative
3) Utwórz kontroler
Utwórz klasę MyModuleController w src / Controller
źródło