Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
CRAP | |
0.00% |
0 / 30 |
| LazyRouteEnhancer | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
182 | |
0.00% |
0 / 30 |
| __construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| setEnhancers | |
0.00% |
0 / 1 |
42 | |
0.00% |
0 / 12 |
|||
| getEnhancers | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 7 |
|||
| enhance | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 9 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\Core\Routing\LazyRouteEnhancer. | |
| */ | |
| namespace Drupal\Core\Routing; | |
| use Drupal\Core\Routing\Enhancer\RouteEnhancerInterface; | |
| use Symfony\Cmf\Component\Routing\Enhancer\RouteEnhancerInterface as BaseRouteEnhancerInterface; | |
| use Symfony\Cmf\Component\Routing\RouteObjectInterface; | |
| use Symfony\Component\DependencyInjection\ContainerAwareInterface; | |
| use Symfony\Component\DependencyInjection\ContainerAwareTrait; | |
| use Symfony\Component\HttpFoundation\Request; | |
| use Symfony\Component\Routing\RouteCollection; | |
| /** | |
| * A route enhancer which lazily loads route enhancers, depending on the route. | |
| * | |
| * We lazy initialize route enhancers, because otherwise all dependencies of | |
| * all route enhancers are initialized on every request, which is slow. However, | |
| * with the use of lazy loading, dependencies are instantiated only when used. | |
| */ | |
| class LazyRouteEnhancer implements BaseRouteEnhancerInterface, ContainerAwareInterface { | |
| use ContainerAwareTrait; | |
| /** | |
| * Array of enhancers service IDs. | |
| * | |
| * @var array | |
| */ | |
| protected $serviceIds = []; | |
| /** | |
| * The initialized route enhancers. | |
| * | |
| * @var \Symfony\Cmf\Component\Routing\Enhancer\RouteEnhancerInterface[]|\Drupal\Core\Routing\Enhancer\RouteEnhancerInterface[] | |
| */ | |
| protected $enhancers = NULL; | |
| /** | |
| * Constructs the LazyRouteEnhancer object. | |
| * | |
| * @param $service_ids | |
| * Array of enhancers service IDs. | |
| */ | |
| public function __construct($service_ids) { | |
| $this->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; | |
| } | |
| } |