Dans Drupal 8, je dois vérifier qu'une route existe ou non dans un module personnalisé. Comment puis-je atteindre cet objectif?
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:
/* @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;
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;
}
$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.
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.