class EsiResponseCacheStrategy

EsiResponseCacheStrategy knows how to compute the Response cache HTTP header based on the different ESI response cache headers.

This implementation changes the master response TTL to the smallest TTL received or force validation if one of the ESI has validation cache strategy.

@author Fabien Potencier <fabien@symfony.com>

Hierarchy

Expanded class hierarchy of EsiResponseCacheStrategy

File

drupal/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/EsiResponseCacheStrategy.php, line 29

Namespace

Symfony\Component\HttpKernel\HttpCache
View source
class EsiResponseCacheStrategy implements EsiResponseCacheStrategyInterface {
  private $cacheable = true;
  private $embeddedResponses = 0;
  private $ttls = array();
  private $maxAges = array();

  /**
   * {@inheritdoc}
   */
  public function add(Response $response) {
    if ($response
      ->isValidateable()) {
      $this->cacheable = false;
    }
    else {
      $this->ttls[] = $response
        ->getTtl();
      $this->maxAges[] = $response
        ->getMaxAge();
    }
    $this->embeddedResponses++;
  }

  /**
   * {@inheritdoc}
   */
  public function update(Response $response) {

    // if we have no embedded Response, do nothing
    if (0 === $this->embeddedResponses) {
      return;
    }

    // Remove validation related headers in order to avoid browsers using
    // their own cache, because some of the response content comes from
    // at least one embedded response (which likely has a different caching strategy).
    if ($response
      ->isValidateable()) {
      $response
        ->setEtag(null);
      $response
        ->setLastModified(null);
      $this->cacheable = false;
    }
    if (!$this->cacheable) {
      $response->headers
        ->set('Cache-Control', 'no-cache, must-revalidate');
      return;
    }
    $this->ttls[] = $response
      ->getTtl();
    $this->maxAges[] = $response
      ->getMaxAge();
    if (null !== ($maxAge = min($this->maxAges))) {
      $response
        ->setSharedMaxAge($maxAge);
      $response->headers
        ->set('Age', $maxAge - min($this->ttls));
    }
    $response
      ->setMaxAge(0);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
EsiResponseCacheStrategy::$cacheable private property
EsiResponseCacheStrategy::$embeddedResponses private property
EsiResponseCacheStrategy::$maxAges private property
EsiResponseCacheStrategy::$ttls private property
EsiResponseCacheStrategy::add public function Adds a Response. Overrides EsiResponseCacheStrategyInterface::add
EsiResponseCacheStrategy::update public function Updates the Response HTTP headers based on the embedded Responses. Overrides EsiResponseCacheStrategyInterface::update