You are here

protected function RouteSubscriber::alterRoutes in Zircon Profile 8

Same name in this branch
  1. 8 core/modules/views/src/EventSubscriber/RouteSubscriber.php \Drupal\views\EventSubscriber\RouteSubscriber::alterRoutes()
  2. 8 core/modules/node/src/Routing/RouteSubscriber.php \Drupal\node\Routing\RouteSubscriber::alterRoutes()
  3. 8 core/modules/config_translation/src/Routing/RouteSubscriber.php \Drupal\config_translation\Routing\RouteSubscriber::alterRoutes()
  4. 8 core/modules/field_ui/src/Routing/RouteSubscriber.php \Drupal\field_ui\Routing\RouteSubscriber::alterRoutes()
Same name and namespace in other branches
  1. 8.0 core/modules/views/src/EventSubscriber/RouteSubscriber.php \Drupal\views\EventSubscriber\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 139
Contains \Drupal\views\EventSubscriber\RouteSubscriber.

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();
    }
  }
}