Я пытаюсь создать новую пользовательскую вкладку, которая появляется на всех маршрутах, которые являются потомками объекта. {Entity_type} .canonical. Я попытался расширить класс DeriverBase, особенно переопределяя метод getDerivativeDefinitions. Я создал вкладку, расширив LocalTaskDefault и переопределив метод getRouteParameters. Вкладка появляется, когда вы посещаете стандартный путь пользователя Drupal, такой как www.mysite.com/user/1/ или www.mysite.com/user/1/edit. Однако, когда мы добавляем наши новые пользовательские маршруты, такие как www.mysite.com/user/1/subscribe, вкладки не появляются. Есть ли особый способ определения локальных задач меню на пользовательских маршрутах? Образец кода:
$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;
}
Спасибо заранее за любую помощь.
Ответы:
По предложению Бердира, вы можете посмотреть на модуль Devel и на то, как он это реализует. Следующий код был "извлечен" из Devel
1) Создать маршруты
Создайте файл mymodule.routing.yml внутри и внутри определите обратный вызов маршрута (который используется для создания динамических маршрутов)
Создайте класс MyModuleRoutes для генерации ваших динамических маршрутов в src / Routing
2) Создать динамические локальные задачи
Создайте файл mymodule.links.task.yml и внутри определите производный
Создайте класс MyModuleLocalTasks для генерации ваших динамических маршрутов в src / Plugin / Derivative
3) Создать контроллер
Создайте класс MyModuleController в src / Controller
источник