serviceIds = $service_ids; } /** * For each route, saves a list of applicable enhancers to the route. * * @param \Symfony\Component\Routing\RouteCollection $route_collection * A collection of routes to apply enhancer checks to. */ public function setEnhancers(RouteCollection $route_collection) { /** @var \Symfony\Component\Routing\Route $route **/ foreach ($route_collection as $route_name => $route) { $service_ids = []; foreach ($this->getEnhancers() as $service_id => $enhancer) { if ((!$enhancer instanceof RouteEnhancerInterface) || $enhancer->applies($route)) { $service_ids[] = $service_id; } } if ($service_ids) { $route->setOption('_route_enhancers', array_unique($service_ids)); } } } /** * For each route, gets a list of applicable enhancer to the route. * * @return \Symfony\Cmf\Component\Routing\Enhancer\RouteEnhancerInterface[]|\Drupal\Core\Routing\Enhancer\RouteEnhancerInterface[] */ protected function getEnhancers() { if (!isset($this->enhancers)) { foreach ($this->serviceIds as $service_id) { $this->enhancers[$service_id] = $this->container->get($service_id); } } return $this->enhancers; } /** * {@inheritdoc} */ public function enhance(array $defaults, Request $request) { /** @var \Symfony\Component\Routing\Route $route */ $route = $defaults[RouteObjectInterface::ROUTE_OBJECT]; $enhancer_ids = $route->getOption('_route_enhancers'); if (isset($enhancer_ids)) { foreach ($enhancer_ids as $enhancer_id) { $defaults = $this->container->get($enhancer_id)->enhance($defaults, $request); } } return $defaults; } }