function RouteSubscriber::alterRoutes

Alters existing routes for a specific collection.

Parameters

\Symfony\Component\Routing\RouteCollection $collection: The route collection for adding routes.

Overrides RouteSubscriberBase::alterRoutes

File

core/modules/views/src/EventSubscriber/RouteSubscriber.php, line 134

Class

RouteSubscriber
Builds up the routes of all views.

Namespace

Drupal\views\EventSubscriber

Code

protected function alterRoutes(RouteCollection $collection) {
  foreach ($this->getViewsDisplayIDsWithRoute() as $pair) {
    list($view_id, $display_id) = explode('.', $pair);
    $view = $this->viewStorage
      ->load($view_id);
    // @todo This should have an executable factory injected.
    if (($view = $view->getExecutable()) && $view instanceof ViewExecutable) {
      if ($view->setDisplay($display_id) && $display = $view->displayHandlers
        ->get($display_id)) {
        if ($display instanceof DisplayRouterInterface) {
          // If the display returns TRUE a route item was found, so it does not
          // have to be added.
          $view_route_names = $display->alterRoutes($collection);
          $this->viewRouteNames = $view_route_names + $this->viewRouteNames;
          foreach ($view_route_names as $id_display => $route_name) {
            $view_route_name = $this->viewsDisplayPairs[$id_display];
            unset($this->viewsDisplayPairs[$id_display]);
            $collection->remove("views.{$view_route_name}");
          }
        }
      }
      $view->destroy();
    }
  }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.