Das aktuelle View-Objekt an Hand eines Route-Objekts abrufen

Geschrieben von patrick am So., 29.01.2017 - 14:00 Uhr

Mitunter möchtest du ein View-Objekt an Hand eines Route-Objekts abrufen. In dem folgenden Beispiel implementieren wir eine preprocess-Funktion für das page template um das View-Objekt, das mit dem aktuellen Route-Objekt assoziiert ist, abzurufen und dann den Titel des aktuellen Displays dieses View-Objekts zu erhalten. Diesen Titel stellen wir dann als Template-Variable unserem Template zur Verfügung.

use Drupal\views\Views;
 
/**
 * Implements hook_preprocess_HOOK() for page.html.twig.
 */
function example_preprocess_page(array &$variables) {
  $variables['view_title'] = '';
 
  // Get current route object.
  $route = \Drupal::routeMatch()->getRouteObject();
  if ($route) {
    // Get view id and display id from route.
    $view_id = $route->getDefault('view_id');
    $display_id = $route->getDefault('display_id');
    // If you just want the page title, you could get it directly from the 
    // route object. Unfortunately, it will be untranslated, so if we want
    // to get the translated title, we still need to load the view object.
    // $route->getDefault('_title');
    if (!empty($view_id) && !empty($display_id)) {
      // Get the view by id.
      $view = Views::getView($view_id);
      if ($view) {
        // Set display id.
        $view->setDisplay($display_id);
        // Get translated title.
        $variables['view_title'] = $view->getTitle();
      }
    }
  }
}

Als erstes besorgen wir uns ein RouteMatch-Objekt und rufen das aktuelle Route-Objekt von dort ab. Dieses Route-Objekt ist das der gerade aktiven Route. Sobald wir das Route-Objekt haben, können wir es ausnutzen, dass Views diverse Standardwerte und Optionen auf die Routen setzt, die es zur Verfügung stellt. Auf diese Weise können wir die View-ID und die Display-ID des Views erhalten, der mit dieser Route assoziiert ist. Schau dir die Methode PathPluginBase::getRoute an, um einen Überblick über weitere Standard-Werte und Optionen, die der Route hinzugefügt werden, zu erhalten, wenn du an etwas exotischeren Dingen interessiert bist ;).

Sobald wir die View-ID und die Display-ID haben, ist es sehr einfach, das View-Objekt an Hand der View ID zu laden und das Display an Hand der Display ID passend zu setzen. Da wir in diesem Beispiel an dem Titel des Views interessiert sind, rufen wir schließlich die Methode getTitle() des View-Objekts auf, um an den übersetzten Titel des Views zu kommen.

Systeme
Drupal 8/9