¿Cómo verifico que existe una ruta?


9

En Drupal 8, necesito verificar que una ruta exista o no en un módulo personalizado. ¿Cómo puedo conseguir esto?

Respuestas:


10
/* @var \Drupal\Core\Routing\RouteProviderInterface $route_provider */
$route_provider = \Drupal::service('router.route_provider');
$route_provider->getRouteByName('abc.xyz');

RouteProviderInterface::getRouteByName()devuelve un \Symfony\Component\Routing\Routeobjeto si existe o lanza una excepción si no existe.

Puedes usarlo RouteProviderInterface::getRoutesByNames()si no quieres una excepción.

$exists = count($route_provider->getRoutesByNames(['abc.xyz'])) === 1;

Tenga en cuenta que getRoutesByNames()aún puede generar una excepción, si obtiene una matriz vacía como parámetro. En el caso de las matrices creadas dinámicamente, es mejor atrapar la excepción o verificar que la matriz pasada al método no esté vacía.
kiamlaluno

Gracias aton @daniel & Kiamlaluno por ayudarme con esto ...
harsh_behl_0007

¡Gracias por el método de prueba! He agregado un problema central para agregar esto como método a RouteProvider: drupal.org/project/drupal/issues/3029545
oknate

6

Para verificar la ruta existe o no, utilice la siguiente función:

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
Como el código está usando $this, esa no es una función, sino un método de una clase. No dices exactamente qué clase.
kiamlaluno

1
Además, (null === $router->getRouteCollection()->get($name)) ? false : truees innecesariamente complicado. No hay necesidad de una operación ternaria, ya que ===devuelve un valor booleano.
kiamlaluno
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.