如何验证路由存在?


9

在Drupal 8中,我需要验证自定义模块中是否存在路由。我该如何实现?

Answers:


10
/* @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(),如果它获得一个空数组作为参数,仍然可以引发异常。对于动态创建的数组,最好捕获异常,或验证传递给该方法的数组不为空。
kiamlaluno

感谢aton @daniel&Kiamlaluno帮助解决了这一问题……
harsh_behl_0007 16/12/12

感谢您的测试方法!我添加了一个核心问题,以将其添加为RouteProvider的一种方法:drupal.org/project/drupal/issues/3029545
oknate

6

要检查路由是否存在,请使用以下功能:

function routeExists($name)
{
    // I assume that you have a link to the container in your twig extension class
    $router = $this->container->get('router');
    return (null === $router->getRouteCollection()->get($name)) ? false : true;
}

1
由于代码正在使用$this,所以它不是函数,而是类的方法。确切地说,您不说哪一堂课。
kiamlaluno

1
而且,(null === $router->getRouteCollection()->get($name)) ? false : true不必要地复杂。不需要三元运算,因为===已经返回了布尔值。
kiamlaluno
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.