Same name in this branch
  1. 10 core/modules/config_translation/src/Routing/RouteSubscriber.php \Drupal\config_translation\Routing\RouteSubscriber::alterRoutes()
  2. 10 core/modules/field_ui/src/Routing/RouteSubscriber.php \Drupal\field_ui\Routing\RouteSubscriber::alterRoutes()
  3. 10 core/modules/media_library/src/Routing/RouteSubscriber.php \Drupal\media_library\Routing\RouteSubscriber::alterRoutes()
  4. 10 core/modules/node/src/Routing/RouteSubscriber.php \Drupal\node\Routing\RouteSubscriber::alterRoutes()
  5. 10 core/modules/views/src/EventSubscriber/RouteSubscriber.php \Drupal\views\EventSubscriber\RouteSubscriber::alterRoutes()
  6. 10 core/modules/media/tests/modules/media_test_embed/src/Routing/RouteSubscriber.php \Drupal\media_test_embed\Routing\RouteSubscriber::alterRoutes()
  7. 10 core/modules/block_content/src/Routing/RouteSubscriber.php \Drupal\block_content\Routing\RouteSubscriber::alterRoutes()
Same name and namespace in other branches
  1. 8.9.x core/modules/views/src/EventSubscriber/RouteSubscriber.php \Drupal\views\EventSubscriber\RouteSubscriber::alterRoutes()
  2. 9 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 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) {
    [
      $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();
    }
  }
}