web-dev-qa-db-fra.com

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

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.

26
Oana Hulpoi

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() retournera 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 la transmettrez ensuite au service dans le fichier yaml de votre module personnalisé:

services:
  mymodule.service:
    class: Drupal\mymodule\MyCustomService
    arguments: ['@current_route_match']
62
oknate