You are here

abstract class AbstractSurrogateFragmentRenderer in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/symfony/http-kernel/Fragment/AbstractSurrogateFragmentRenderer.php \Symfony\Component\HttpKernel\Fragment\AbstractSurrogateFragmentRenderer

Implements Surrogate rendering strategy.

@author Fabien Potencier <fabien@symfony.com>

Hierarchy

Expanded class hierarchy of AbstractSurrogateFragmentRenderer

File

vendor/symfony/http-kernel/Fragment/AbstractSurrogateFragmentRenderer.php, line 25

Namespace

Symfony\Component\HttpKernel\Fragment
View source
abstract class AbstractSurrogateFragmentRenderer extends RoutableFragmentRenderer {
  private $surrogate;
  private $inlineStrategy;
  private $signer;

  /**
   * Constructor.
   *
   * The "fallback" strategy when surrogate is not available should always be an
   * instance of InlineFragmentRenderer.
   *
   * @param SurrogateInterface        $surrogate      An Surrogate instance
   * @param FragmentRendererInterface $inlineStrategy The inline strategy to use when the surrogate is not supported
   * @param UriSigner                 $signer
   */
  public function __construct(SurrogateInterface $surrogate = null, FragmentRendererInterface $inlineStrategy, UriSigner $signer = null) {
    $this->surrogate = $surrogate;
    $this->inlineStrategy = $inlineStrategy;
    $this->signer = $signer;
  }

  /**
   * {@inheritdoc}
   *
   * 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
   *
   * 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($uri, Request $request, array $options = array()) {
    if (!$this->surrogate || !$this->surrogate
      ->hasSurrogateCapability($request)) {
      return $this->inlineStrategy
        ->render($uri, $request, $options);
    }
    if ($uri instanceof ControllerReference) {
      $uri = $this
        ->generateSignedFragmentUri($uri, $request);
    }
    $alt = isset($options['alt']) ? $options['alt'] : null;
    if ($alt instanceof ControllerReference) {
      $alt = $this
        ->generateSignedFragmentUri($alt, $request);
    }
    $tag = $this->surrogate
      ->renderIncludeTag($uri, $alt, isset($options['ignore_errors']) ? $options['ignore_errors'] : false, isset($options['comment']) ? $options['comment'] : '');
    return new Response($tag);
  }
  private function generateSignedFragmentUri($uri, Request $request) {
    if (null === $this->signer) {
      throw new \LogicException('You must use a URI when using the ESI rendering strategy or set a URL signer.');
    }

    // we need to sign the absolute URI, but want to return the path only.
    $fragmentUri = $this->signer
      ->sign($this
      ->generateFragmentUri($uri, $request, true));
    return substr($fragmentUri, strlen($request
      ->getSchemeAndHttpHost()));
  }

}

Members

Namesort descending Modifiers Type Description Overrides
AbstractSurrogateFragmentRenderer::$inlineStrategy private property
AbstractSurrogateFragmentRenderer::$signer private property
AbstractSurrogateFragmentRenderer::$surrogate private property
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 Constructor.
FragmentRendererInterface::getName public function Gets the name of the strategy. 5
RoutableFragmentRenderer::$fragmentPath private property
RoutableFragmentRenderer::checkNonScalar private function
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.