Comment puis-je vérifier qu'un itinéraire existe?


9

Dans Drupal 8, je dois vérifier qu'une route existe ou non dans un module personnalisé. Comment puis-je atteindre cet objectif?

Réponses:


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

RouteProviderInterface::getRouteByName()renvoie un \Symfony\Component\Routing\Routeobjet s'il existe, ou lève une exception dans le cas contraire.

Vous pouvez utiliser RouteProviderInterface::getRoutesByNames()si vous ne voulez pas d'exception.

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

Notez que cela getRoutesByNames()peut toujours déclencher une exception, s'il obtient un tableau vide comme paramètre. Dans le cas de tableaux créés dynamiquement, il est préférable d'intercepter l'exception ou de vérifier que le tableau transmis à la méthode n'est pas vide.
kiamlaluno

Merci aton @daniel & Kiamlaluno pour leur aide ...
harsh_behl_0007

Merci pour la méthode de test! J'ai ajouté un problème de base pour l'ajouter en tant que méthode à RouteProvider: drupal.org/project/drupal/issues/3029545
oknate

6

Pour vérifier que l'itinéraire existe ou non, utilisez la fonction ci-dessous:

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
Puisque le code utilise $this, ce n'est pas une fonction, mais une méthode d'une classe. Vous ne dites pas quelle classe, exactement.
kiamlaluno

1
En outre, (null === $router->getRouteCollection()->get($name)) ? false : trueest inutilement compliqué. Il n'y a pas besoin d'une opération ternaire, car ===retourne déjà un booléen.
kiamlaluno
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.