Я новичок в Drupal.Я написал собственный модуль в Drupal 8, и он работает и отображает некоторый контент.
Я хочу добавить в профиль пользователя вкладку, которая ссылается на мой пользовательский модуль.
Насколько японимаю, мне нужно написать маршрут и задачу.Вот что я сделал:
my_module.routing.yml
my_module.some_route_name:
path: '/user/{user}/some_path'
defaults:
_controller: '\Drupal\my_module\Controller\MyModuleController::content'
_title: 'Some Title'
requirements:
_permission: 'access content'
options:
user: \d+
my_module.links.tasks.yml
my_module.some_task_name:
route_name: my_module.some_route_name
base_route: entity.user.canonical
title: 'Some Title'
Я сделал это, и маршрут работает должным образом, однако на вкладке профиля моего пользователя не отображается .
Это должно выглядеть примерно так:
Edit 1
Я частично решил проблему, создав хук в соответствии с Drupal API 8.6 (menu_local_tasks_alter), и это то, что я написал:
function my_module_menu_local_tasks_alter(&$data, $route_name, \Drupal\Core\Cache\RefinableCacheableDependencyInterface &$cacheability) {
$url = Drupal\Core\Url::fromRoute('my_module.some_route_name');
if ($route_name == 'entity.user.canonical') {
$data['tabs'][0]['my_module.some_route_name'] = [
'#theme' => 'menu_local_task',
'#link' => [
'title' => t('Some Title'),
'url' => $url,
'localized_options' => [
'attributes' => [
'title' => t('Add content'),
],
],
],
];
// The tab we're adding is dependent on a user's access to add content.
$cacheability
->addCacheTags([
'user.permissions',
]);
}
}
Это работает, если я заменяю {user} часть пути моего маршрута на 1. Когда у меня есть {user} в пути, теперь он жалуется на следующееошибка:
The website encountered an unexpected error. Please try again later.</br></br><em class="placeholder">Symfony\Component\Routing\Exception\MissingMandatoryParametersException</em>: Some mandatory parameters are missing ("user") to generate a URL for route ...
Редактировать 2
Я также убедился, что мой метод содержимого в моем контроллере был предоставлен с помощью объекта user $ user, который реализует AccountInterface, как описано здесь: https://www.drupal.org/docs/8/api/routing-system/using-parameters-in-routes однако я все еще получаю то же сообщение об ошибке.