class AbstractSurrogateFragmentRenderer
Implements Surrogate rendering strategy.
@author Fabien Potencier <fabien@symfony.com>
Hierarchy
- class \Symfony\Component\HttpKernel\Fragment\RoutableFragmentRenderer implements \Symfony\Component\HttpKernel\Fragment\FragmentRendererInterface
- class \Symfony\Component\HttpKernel\Fragment\AbstractSurrogateFragmentRenderer extends \Symfony\Component\HttpKernel\Fragment\RoutableFragmentRenderer
Expanded class hierarchy of AbstractSurrogateFragmentRenderer
File
-
vendor/
symfony/ http-kernel/ Fragment/ AbstractSurrogateFragmentRenderer.php, line 25
Namespace
Symfony\Component\HttpKernel\FragmentView source
abstract class AbstractSurrogateFragmentRenderer extends RoutableFragmentRenderer {
/**
* The "fallback" strategy when surrogate is not available should always be an
* instance of InlineFragmentRenderer.
*
* @param FragmentRendererInterface $inlineStrategy The inline strategy to use when the surrogate is not supported
*/
public function __construct(?SurrogateInterface $surrogate, FragmentRendererInterface $inlineStrategy, ?UriSigner $signer = null) {
}
/**
* Note that if the current Request has no surrogate capability, this method
* falls back to use the inline rendering strategy.
*
* Additional available options:
*
* * alt: an alternative URI to render in case of an error
* * comment: a comment to add when returning the surrogate tag
* * absolute_uri: whether to generate an absolute URI or not. Default is false
*
* Note, that not all surrogate strategies support all options. For now
* 'alt' and 'comment' are only supported by ESI.
*
* @see Symfony\Component\HttpKernel\HttpCache\SurrogateInterface
*/
public function render(string|ControllerReference $uri, Request $request, array $options = []) : Response {
if (!$this->surrogate || !$this->surrogate
->hasSurrogateCapability($request)) {
$request->attributes
->set('_check_controller_is_allowed', true);
if ($uri instanceof ControllerReference && $this->containsNonScalars($uri->attributes)) {
throw new \InvalidArgumentException('Passing non-scalar values as part of URI attributes to the ESI and SSI rendering strategies is not supported. Use a different rendering strategy or pass scalar values.');
}
return $this->inlineStrategy
->render($uri, $request, $options);
}
$absolute = $options['absolute_uri'] ?? false;
if ($uri instanceof ControllerReference) {
$uri = $this->generateSignedFragmentUri($uri, $request, $absolute);
}
$alt = $options['alt'] ?? null;
if ($alt instanceof ControllerReference) {
$alt = $this->generateSignedFragmentUri($alt, $request, $absolute);
}
$tag = $this->surrogate
->renderIncludeTag($uri, $alt, $options['ignore_errors'] ?? false, $options['comment'] ?? '');
return new Response($tag);
}
private function generateSignedFragmentUri(ControllerReference $uri, Request $request, bool $absolute) : string {
return (new FragmentUriGenerator($this->fragmentPath, $this->signer))
->generate($uri, $request, $absolute);
}
private function containsNonScalars(array $values) : bool {
foreach ($values as $value) {
if (\is_scalar($value) || null === $value) {
continue;
}
if (!\is_array($value) || $this->containsNonScalars($value)) {
return true;
}
}
return false;
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overriden Title | Overrides |
---|---|---|---|---|---|
AbstractSurrogateFragmentRenderer::containsNonScalars | private | function | |||
AbstractSurrogateFragmentRenderer::generateSignedFragmentUri | private | function | |||
AbstractSurrogateFragmentRenderer::render | public | function | Note that if the current Request has no surrogate capability, this method falls back to use the inline rendering strategy. |
Overrides FragmentRendererInterface::render | |
AbstractSurrogateFragmentRenderer::__construct | public | function | The "fallback" strategy when surrogate is not available should always be an instance of InlineFragmentRenderer. |
||
FragmentRendererInterface::getName | public | function | Gets the name of the strategy. | 4 | |
RoutableFragmentRenderer::$fragmentPath | protected | property | @internal | ||
RoutableFragmentRenderer::generateFragmentUri | protected | function | Generates a fragment URI for a given controller. | ||
RoutableFragmentRenderer::setFragmentPath | public | function | Sets the fragment path that triggers the fragment listener. |