En Drupal 8, necesito verificar que una ruta exista o no en un módulo personalizado. ¿Cómo puedo conseguir esto?
En Drupal 8, necesito verificar que una ruta exista o no en un módulo personalizado. ¿Cómo puedo conseguir esto?
Respuestas:
/* @var \Drupal\Core\Routing\RouteProviderInterface $route_provider */
$route_provider = \Drupal::service('router.route_provider');
$route_provider->getRouteByName('abc.xyz');
RouteProviderInterface::getRouteByName()
devuelve un \Symfony\Component\Routing\Route
objeto si existe o lanza una excepción si no existe.
Puedes usarlo RouteProviderInterface::getRoutesByNames()
si no quieres una excepción.
$exists = count($route_provider->getRoutesByNames(['abc.xyz'])) === 1;
Para verificar la ruta existe o no, utilice la siguiente función:
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
, esa no es una función, sino un método de una clase. No dices exactamente qué clase.
(null === $router->getRouteCollection()->get($name)) ? false : true
es innecesariamente complicado. No hay necesidad de una operación ternaria, ya que ===
devuelve un valor booleano.
getRoutesByNames()
aún puede generar una excepción, si obtiene una matriz vacía como parámetro. En el caso de las matrices creadas dinámicamente, es mejor atrapar la excepción o verificar que la matriz pasada al método no esté vacía.