Obtenir le nom de l'itinéraire de la page actuelle

24

Le nom de l'itinéraire de la page actuelle est disponible dans page.html.twig? La page est générée par le formulaire de commentaires par défaut.

Oana Hulpoi
la source

Réponses:

57

Pour obtenir le nom de l'itinéraire actuel, utilisez:

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

Vous pouvez ajouter le nom de l'itinéraire de la page actuelle en tant que variable dans le fichier ".theme" de votre thème. Ajoutez une fonction _preprocess_page comme celle-ci et videz le cache drupal.

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

Ensuite, vous pouvez accéder à page.html.twig comme ceci:

{{ route_name }}

Remarque: \Drupal::routeMatch()->getRouteName() renvoie parfois null.

Si vous êtes dans une classe, pour faire les choses correctement, vous voudrez injecter le service de correspondance de route dans le constructeur, puis l'appeler de cette façon:

$this->currentRouteMatch->getRouteName()

Le constructeur (et la variable) sera comme ceci:

  /**
   * 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;
  }

S'il s'agit d'une classe de service, vous devez ensuite la transmettre au service dans le fichier yaml de votre module personnalisé:

services:
  mymodule.service:
    class: Drupal\mymodule\MyCustomService
    arguments: ['@current_route_match']
oknate
la source
Il y a une CLI (commande en mode ligne) quelque part qui montre toutes les routes drupales ... ne semble pas se souvenir de ce que c'était ... Je mettrai à jour (sauf si quelqu'un d'autre le sait)
sea26.2