Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
55.56% |
5 / 9 |
CRAP | |
77.27% |
17 / 22 |
MetadataBubblingUrlGenerator | |
0.00% |
0 / 1 |
|
55.56% |
5 / 9 |
13.69 | |
77.27% |
17 / 22 |
__construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
setContext | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getContext | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
getPathFromRoute | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
bubble | |
100.00% |
1 / 1 |
2 | |
100.00% |
5 / 5 |
|||
generate | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
|||
generateFromRoute | |
100.00% |
1 / 1 |
3 | |
100.00% |
4 / 4 |
|||
supports | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
getRouteDebugMessage | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\Core\Render\MetadataBubblingUrlGenerator. | |
*/ | |
namespace Drupal\Core\Render; | |
use Drupal\Core\GeneratedUrl; | |
use Drupal\Core\Routing\UrlGeneratorInterface; | |
use Symfony\Component\Routing\RequestContext as SymfonyRequestContext; | |
/** | |
* Decorator for the URL generator, which bubbles bubbleable URL metadata. | |
* | |
* Implements a decorator for the URL generator that allows to automatically | |
* collect and bubble up bubbleable metadata associated with URLs due to | |
* outbound path and route processing. This approach helps keeping the render | |
* and the routing subsystems decoupled. | |
* | |
* @see \Drupal\Core\RouteProcessor\OutboundRouteProcessorInterface | |
* @see \Drupal\Core\PathProcessor\OutboundPathProcessorInterface | |
* @see \Drupal\Core\Render\BubbleableMetadata | |
*/ | |
class MetadataBubblingUrlGenerator implements UrlGeneratorInterface { | |
/** | |
* The non-bubbling URL generator. | |
* | |
* @var \Drupal\Core\Routing\UrlGeneratorInterface | |
*/ | |
protected $urlGenerator; | |
/** | |
* The renderer. | |
* | |
* @var \Drupal\Core\Render\RendererInterface | |
*/ | |
protected $renderer; | |
/** | |
* Constructs a new bubbling URL generator service. | |
* | |
* @param \Drupal\Core\Routing\UrlGeneratorInterface $url_generator | |
* The non-bubbling URL generator. | |
* @param \Drupal\Core\Render\RendererInterface $renderer | |
* The renderer. | |
*/ | |
public function __construct(UrlGeneratorInterface $url_generator, RendererInterface $renderer) { | |
$this->urlGenerator = $url_generator; | |
$this->renderer = $renderer; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function setContext(SymfonyRequestContext $context) { | |
$this->urlGenerator->setContext($context); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getContext() { | |
return $this->urlGenerator->getContext(); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getPathFromRoute($name, $parameters = array()) { | |
return $this->urlGenerator->getPathFromRoute($name, $parameters); | |
} | |
/** | |
* Bubbles the bubbleable metadata to the current render context. | |
* | |
* @param \Drupal\Core\GeneratedUrl $generated_url | |
* The generated URL whose bubbleable metadata to bubble. | |
* @param array $options | |
* (optional) The URL options. Defaults to none. | |
*/ | |
protected function bubble(GeneratedUrl $generated_url, array $options = []) { | |
// Bubbling metadata makes sense only if the code is executed inside a | |
// render context. All code running outside controllers has no render | |
// context by default, so URLs used there are not supposed to affect the | |
// response cacheability. | |
if ($this->renderer->hasRenderContext()) { | |
$build = []; | |
$generated_url->applyTo($build); | |
$this->renderer->render($build); | |
} | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function generate($name, $parameters = array(), $absolute = FALSE) { | |
$options['absolute'] = $absolute; | |
$generated_url = $this->generateFromRoute($name, $parameters, $options, TRUE); | |
$this->bubble($generated_url); | |
return $generated_url->getGeneratedUrl(); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function generateFromRoute($name, $parameters = array(), $options = array(), $collect_bubbleable_metadata = FALSE) { | |
$generated_url = $this->urlGenerator->generateFromRoute($name, $parameters, $options, TRUE); | |
if (!$collect_bubbleable_metadata) { | |
$this->bubble($generated_url, $options); | |
} | |
return $collect_bubbleable_metadata ? $generated_url : $generated_url->getGeneratedUrl(); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function supports($name) { | |
return $this->urlGenerator->supports($name); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getRouteDebugMessage($name, array $parameters = array()) { | |
return $this->urlGenerator->getRouteDebugMessage($name, $parameters); | |
} | |
} |