Предположим, что список содержит такие пути, как /node/2, /user/1 или admin/content, и вам нужно получить имя маршрута для этих путей, обрабатываемых модулем Views, вы можете использовать код, аналогичный следующему.
используйте Drupal\Core\Path\PathValidatorInterface;
используйте Drupal\Core\Url;
функция _view_routes (массив $paths) {
$view_routes = [];
$path_validator = \Drupal::service('path.validator');
foreach ($paths как $path) {
$view_route = '';
если ($url = $path_validator->getUrlIfValid($path)) {
$route_name = $url->getRouteName();
if (strpos($route_name, 'view.') === 0) {
$view_route = $route_name;
}
}
$view_routes[$path] = $view_route;
}
вернуть $view_routes;
}
PathValidator::getUrlIfValid()
возвращает URL
объект, если путь, который он получает в качестве аргумента, действителен и доступен для текущего вошедшего в систему пользователя. Чтобы понять, какие пути предназначены для страниц, обрабатываемых модулем Views, независимо от того, какие пользователи имеют доступ к этой странице, код должен быть похож на следующий.
используйте Symfony\Component\Routing\Matcher\RequestMatcherInterface;
функция _view_routes (массив $paths) {
$view_routes = [];
$router = \Drupal::service('router.no_access_checks');
foreach ($paths как $path) {
пытаться {
$match = $router->match($path);
}
поймать (\ Исключение $e) {
// Неверный путь или метод HTTP для доступа к
// путь не разрешен.
$view_routes[$path] = '';
Продолжить;
}
$view_routes[$path] = (strpos($match['_route'], 'view.') === 0 ? $match['_route'] : '');
}
вернуть $view_routes;
}