Come posso verificare l'esistenza di un percorso?


9

In Drupal 8, devo verificare l'esistenza di un percorso o meno in un modulo personalizzato. Come posso raggiungere questo obiettivo?

Risposte:


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

RouteProviderInterface::getRouteByName()restituisce un \Symfony\Component\Routing\Routeoggetto se esiste o genera un'eccezione in caso contrario.

È possibile utilizzare RouteProviderInterface::getRoutesByNames()se non si desidera un'eccezione.

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

Si noti che getRoutesByNames()può comunque sollevare un'eccezione, se ottiene un array vuoto come parametro. Nel caso di array creati dinamicamente, è meglio intercettare l'eccezione o verificare che l'array passato al metodo non sia vuoto.
kiamlaluno

Grazie aton @daniel & Kiamlaluno per l'aiuto di questo ...
harsh_behl_0007

Grazie per il metodo di prova! Ho aggiunto un problema fondamentale per aggiungere questo come metodo a RouteProvider: drupal.org/project/drupal/issues/3029545
oknate

6

Per verificare che il percorso esista o meno, utilizzare la funzione seguente:

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
Poiché il codice sta utilizzando $this, questa non è una funzione, ma un metodo di una classe. Non dici esattamente quale classe.
kiamlaluno

1
Inoltre, (null === $router->getRouteCollection()->get($name)) ? false : trueè inutilmente complicato. Non è necessaria un'operazione ternaria, poiché ===restituisce già un valore booleano.
kiamlaluno
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.