Obter o nome da rota da página atual

24

O nome da rota da página atual está disponível em page.html.twig? A página é gerada pelo formulário de feedback padrão.

Oana Hulpoi
fonte

Respostas:

57

Para obter o nome da rota atual, use:

$route_name = \Drupal::routeMatch()->getRouteName();

Você pode adicionar o nome da rota da página atual como uma variável no arquivo ".theme" do seu tema. Adicione uma função _preprocess_page como esta e limpe o cache do drupal.

/**
 * Implements hook_preprocess_page().
 *
 */
function mytheme_preprocess_page(&$variables) {
  $variables['route_name'] = \Drupal::routeMatch()->getRouteName();
}

Então você pode acessar em page.html.twig assim:

{{ route_name }}

Nota: \Drupal::routeMatch()->getRouteName() às vezes retornará nulo.

Se você estiver dentro de uma classe, para fazer as coisas corretamente, você desejará injetar o serviço de correspondência de rota no construtor e depois chamar da seguinte maneira:

$this->currentRouteMatch->getRouteName()

O construtor (e variável) será assim:

  /**
   * The current route match.
   *
   * @var \Drupal\Core\Routing\RouteMatchInterface
   */
  protected $currentRouteMatch;

  /**
   * Constructs a new ThemeTestSubscriber.
   *
   * @param \Drupal\Core\Routing\RouteMatchInterface $current_route_match
   */
  public function __construct(RouteMatchInterface $current_route_match) {
    $this->currentRouteMatch = $current_route_match;
  }

Se for uma classe de serviço, você a passará para o serviço no arquivo yaml em seu módulo personalizado:

services:
  mymodule.service:
    class: Drupal\mymodule\MyCustomService
    arguments: ['@current_route_match']
oknate
fonte
Há uma CLI (comando modo de linha) em algum lugar que mostra todas as rotas de Drupal ... não consigo lembrar o que era ... eu vou atualizar (a menos que alguém sabe)
sea26.2