В Drupal 8 мне нужно проверить, существует ли маршрут в пользовательском модуле или нет. Как мне этого добиться?
9
/* @var \Drupal\Core\Routing\RouteProviderInterface $route_provider */
$route_provider = \Drupal::service('router.route_provider');
$route_provider->getRouteByName('abc.xyz');
RouteProviderInterface::getRouteByName()
возвращает \Symfony\Component\Routing\Route
объект, если он существует, или выдает исключение, если это не так.
Вы можете использовать, RouteProviderInterface::getRoutesByNames()
если вы не хотите исключения.
$exists = count($route_provider->getRoutesByNames(['abc.xyz'])) === 1;
getRoutesByNames()
все еще может вызвать исключение, если он получает пустой массив в качестве параметра. В случае динамически создаваемых массивов лучше перехватить исключение или убедиться, что массив, переданный методу, не пуст.Для проверки наличия или отсутствия маршрута используйте следующую функцию:
источник
$this
, это не функция, а метод класса. Вы не говорите, какой класс, точно.(null === $router->getRouteCollection()->get($name)) ? false : true
это излишне сложно. Нет необходимости в троичной операции, так как===
возвращает уже логическое значение.