public function VariantRouteFilter::filter in Page Manager 8
Same name and namespace in other branches
- 8.4 src/Routing/VariantRouteFilter.php \Drupal\page_manager\Routing\VariantRouteFilter::filter()
Ensures only one page manager route remains in the collection.
File
- src/Routing/ VariantRouteFilter.php, line 74 
- Contains \Drupal\page_manager\Routing\VariantRouteFilter.
Class
- VariantRouteFilter
- Filters variant routes.
Namespace
Drupal\page_manager\RoutingCode
public function filter(RouteCollection $collection, Request $request) {
  $routes = $collection
    ->all();
  // Only continue if at least one route has a page manager variant.
  if (!array_filter($routes, function (Route $route) {
    return $route
      ->hasDefault('page_manager_page_variant');
  })) {
    return $collection;
  }
  // Sort routes by variant weight.
  $routes = $this
    ->sortRoutes($routes);
  $variant_route_name = $this
    ->getVariantRouteName($routes, $request);
  foreach ($routes as $name => $route) {
    if (!$route
      ->hasDefault('page_manager_page_variant')) {
      continue;
    }
    // If this page manager route isn't the one selected, remove it.
    if ($variant_route_name !== $name) {
      unset($routes[$name]);
    }
    elseif ($overridden_route_name = $route
      ->getDefault('overridden_route_name')) {
      unset($routes[$overridden_route_name]);
    }
  }
  // Create a new route collection by iterating over the sorted routes, using
  // the overridden_route_name if available.
  $result_collection = new RouteCollection();
  foreach ($routes as $name => $route) {
    $overridden_route_name = $route
      ->getDefault('overridden_route_name') ?: $name;
    $result_collection
      ->add($overridden_route_name, $route);
  }
  return $result_collection;
}