Obtener el nombre de la ruta de la página actual

24

El nombre de la ruta de la página actual está disponible en page.html.twig? La página se genera mediante el formulario de comentarios predeterminado.

Oana Hulpoi
fuente

Respuestas:

57

Para obtener el nombre de la ruta actual, use:

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

Puede agregar el nombre de ruta de la página actual como una variable en el archivo ".theme" de su tema. Agregue una función _preprocess_page como esta y borre el caché de drupal.

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

Luego puede acceder en page.html.twig de esta manera:

{{ route_name }}

Nota: \Drupal::routeMatch()->getRouteName() a veces devolverá nulo.

Si está dentro de una clase, para hacer las cosas correctamente, querrá inyectar el servicio de coincidencia de ruta en el constructor y luego llamarlo de esta manera:

$this->currentRouteMatch->getRouteName()

El constructor (y variable) será así:

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

Si se trata de una clase de servicio, la pasaría al servicio en el archivo yaml de su módulo personalizado:

services:
  mymodule.service:
    class: Drupal\mymodule\MyCustomService
    arguments: ['@current_route_match']
oknate
fuente
Hay un CLI (comando de modo de línea) en algún lugar que muestra todas las rutas de drupal ... parece que no puedo recordar lo que era ... Actualizaré (a menos que alguien más lo sepa)
mar26.2