Implements the ESI rendering strategy.
@author Fabien Potencier <fabien@symfony.com>
Expanded class hierarchy of EsiFragmentRenderer
class EsiFragmentRenderer extends RoutableFragmentRenderer {
private $esi;
private $inlineStrategy;
/**
* Constructor.
*
* The "fallback" strategy when ESI is not available should always be an
* instance of InlineFragmentRenderer.
*
* @param Esi $esi An Esi instance
* @param InlineFragmentRenderer $inlineStrategy The inline strategy to use when ESI is not supported
*/
public function __construct(Esi $esi, InlineFragmentRenderer $inlineStrategy) {
$this->esi = $esi;
$this->inlineStrategy = $inlineStrategy;
}
/**
* {@inheritdoc}
*
* Note that if the current Request has no ESI 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 an esi:include tag
*
* @see Symfony\Component\HttpKernel\HttpCache\ESI
*/
public function render($uri, Request $request, array $options = array()) {
if (!$this->esi
->hasSurrogateEsiCapability($request)) {
return $this->inlineStrategy
->render($uri, $request, $options);
}
if ($uri instanceof ControllerReference) {
$uri = $this
->generateFragmentUri($uri, $request);
}
$alt = isset($options['alt']) ? $options['alt'] : null;
if ($alt instanceof ControllerReference) {
$alt = $this
->generateFragmentUri($alt, $request);
}
$tag = $this->esi
->renderIncludeTag($uri, $alt, isset($options['ignore_errors']) ? $options['ignore_errors'] : false, isset($options['comment']) ? $options['comment'] : '');
return new Response($tag);
}
/**
* {@inheritdoc}
*/
public function getName() {
return 'esi';
}
}
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
EsiFragmentRenderer:: |
private | property | ||
EsiFragmentRenderer:: |
private | property | ||
EsiFragmentRenderer:: |
public | function |
Gets the name of the strategy. Overrides FragmentRendererInterface:: |
|
EsiFragmentRenderer:: |
public | function |
Note that if the current Request has no ESI capability, this method
falls back to use the inline rendering strategy. Overrides FragmentRendererInterface:: |
|
EsiFragmentRenderer:: |
public | function | Constructor. | |
RoutableFragmentRenderer:: |
private | property | ||
RoutableFragmentRenderer:: |
protected | function | Generates a fragment URI for a given controller. | |
RoutableFragmentRenderer:: |
public | function | Sets the fragment path that triggers the fragment listener. |