Dans Drupal 8, je dois vérifier qu'une route existe ou non dans un module personnalisé. Comment puis-je atteindre cet objectif?
9
/* @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\Route
objet 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;
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.Pour vérifier que l'itinéraire existe ou non, utilisez la fonction ci-dessous:
la source
$this
, ce n'est pas une fonction, mais une méthode d'une classe. Vous ne dites pas quelle classe, exactement.(null === $router->getRouteCollection()->get($name)) ? false : true
est inutilement compliqué. Il n'y a pas besoin d'une opération ternaire, car===
retourne déjà un booléen.