You are here

class ResponseCacheStrategy in Zircon Profile 8

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

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

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

@author Fabien Potencier <fabien@symfony.com>

Hierarchy

Expanded class hierarchy of ResponseCacheStrategy

File

vendor/symfony/http-kernel/HttpCache/ResponseCacheStrategy.php, line 29

Namespace

Symfony\Component\HttpKernel\HttpCache
View source
class ResponseCacheStrategy implements ResponseCacheStrategyInterface {
  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
ResponseCacheStrategy::$cacheable private property
ResponseCacheStrategy::$embeddedResponses private property
ResponseCacheStrategy::$maxAges private property
ResponseCacheStrategy::$ttls private property
ResponseCacheStrategy::add public function Adds a Response. Overrides ResponseCacheStrategyInterface::add
ResponseCacheStrategy::update public function Updates the Response HTTP headers based on the embedded Responses. Overrides ResponseCacheStrategyInterface::update