No Drupal 8, preciso verificar se existe uma rota ou não em um módulo personalizado. Como posso conseguir isso?
No Drupal 8, preciso verificar se existe uma rota ou não em um módulo personalizado. Como posso conseguir isso?
Respostas:
/* @var \Drupal\Core\Routing\RouteProviderInterface $route_provider */
$route_provider = \Drupal::service('router.route_provider');
$route_provider->getRouteByName('abc.xyz');
RouteProviderInterface::getRouteByName()
retorna um \Symfony\Component\Routing\Route
objeto, se existir, ou lança uma exceção, se não existir.
Você pode usar RouteProviderInterface::getRoutesByNames()
se não desejar uma exceção.
$exists = count($route_provider->getRoutesByNames(['abc.xyz'])) === 1;
Para verificar se a rota existe ou não use a função abaixo:
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
, isso não é uma função, mas um método de uma classe. Você não diz exatamente qual classe.
(null === $router->getRouteCollection()->get($name)) ? false : true
é desnecessariamente complicado. Não há necessidade de uma operação ternária, pois ===
já retorna um booleano.
getRoutesByNames()
ainda pode gerar uma exceção, se ela obtiver uma matriz vazia como parâmetro. No caso de matrizes criadas dinamicamente, é melhor capturar a exceção ou verificar se a matriz passada para o método não está vazia.