In Drupal 8 muss ich überprüfen, ob eine Route in einem benutzerdefinierten Modul vorhanden ist oder nicht. Wie kann ich das erreichen?
In Drupal 8 muss ich überprüfen, ob eine Route in einem benutzerdefinierten Modul vorhanden ist oder nicht. Wie kann ich das erreichen?
Antworten:
/* @var \Drupal\Core\Routing\RouteProviderInterface $route_provider */
$route_provider = \Drupal::service('router.route_provider');
$route_provider->getRouteByName('abc.xyz');
RouteProviderInterface::getRouteByName()
Gibt ein \Symfony\Component\Routing\Route
Objekt zurück, falls vorhanden, oder löst eine Ausnahme aus, wenn dies nicht der Fall ist.
Sie können verwenden, RouteProviderInterface::getRoutesByNames()
wenn Sie keine Ausnahme wünschen.
$exists = count($route_provider->getRoutesByNames(['abc.xyz'])) === 1;
Um zu überprüfen, ob eine Route vorhanden ist oder nicht, verwenden Sie die folgende Funktion:
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
wird, ist dies keine Funktion, sondern eine Methode einer Klasse. Sie sagen nicht genau, welche Klasse.
(null === $router->getRouteCollection()->get($name)) ? false : true
ist unnötig kompliziert. Eine ternäre Operation ist nicht erforderlich, da ===
bereits ein Boolescher Wert zurückgegeben wird.
getRoutesByNames()
dies immer noch eine Ausnahme auslösen kann, wenn ein leeres Array als Parameter abgerufen wird. Bei dynamisch erstellten Arrays ist es besser, die Ausnahme abzufangen oder sicherzustellen, dass das an die Methode übergebene Array nicht leer ist.