Рейтинг:0

Как проверить, предназначен ли путь для представления?

флаг in

У меня есть список путей, и я хотел бы определить, какие из них связаны с просмотром маршрутов.

Есть ли какой-нибудь метод Drupal 8, который я могу использовать? Нужно ли мне получить все маршруты просмотра, а затем проверить, какие из них связаны с путями, которые у меня есть?

флаг ru
Что такое «путь просмотра»?
leymannx avatar
флаг ne
Отвечает ли это на ваш вопрос? [Получить имя маршрута текущей страницы] (https://drupal.stackexchange.com/questions/202831/get-the-route-name-of-the-current-page)
leymannx avatar
флаг ne
Не могли бы вы проверить текущее имя маршрута и посмотреть, содержит ли он какой-либо идентификатор, например `*.view.*` или что-то еще, что вы можете использовать?
sonfd avatar
флаг in
Маршруты страниц просмотра имеют имена маршрутов, отформатированные как: `view.VIEW_ID.DISPLAY_ID`
4uk4 avatar
флаг cn
Преобразование в объекты URL. См. https://drupal.stackexchange.com/questions/190036/how-do-i-convert-a-string-like-node-1-into-a-routematch-or-url-object.
user3560198 avatar
флаг in
Спасибо @ 4k4, я тоже попробую ваше решение.
Рейтинг:3
флаг in

Я думаю, что лучший способ сделать это - использовать router.route_provider оказание услуг. В частности, вы можете использовать RouteProvider::getRoutesByPattern(). См. следующий код, адаптированный из кода, показанного в комментарий Иоахима в Получить имя маршрута по пути в Drupal 8.

функция getViewPaths (массив $paths_to_check = []): массив {
  /** @var \Drupal\Core\Routing\RouteProviderInterface $route_provider */
  $route_provider = \Drupal::service('router.route_provider');

  $view_paths = [];
  foreach ($paths_to_check как $path) {
    $path_route_collection = $route_provider->getRoutesByPattern($path);
    foreach ($path_route_collection->all() as $route_name => $route) {
      if (strpos($route_name, 'view.') === 0) {
        $view_paths[] = $путь;
      }
    }
  }

  вернуть $view_paths;
}

$my_view_paths = getViewPaths([
  '/о',
  '/какой-то/другой/путь',
  '/ еще один путь',
]);
user3560198 avatar
флаг in
Привет sonfd, большое спасибо за ваше решение. Я думаю, что это должно служить моей цели.
Рейтинг:1
флаг us

Предположим, что список содержит такие пути, как /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;
}
user3560198 avatar
флаг in
Спасибо @apaderno за ваше решение.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.