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>
Expanded class hierarchy of EsiResponseCacheStrategy
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);
}
}
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
EsiResponseCacheStrategy:: |
private | property | ||
EsiResponseCacheStrategy:: |
private | property | ||
EsiResponseCacheStrategy:: |
private | property | ||
EsiResponseCacheStrategy:: |
private | property | ||
EsiResponseCacheStrategy:: |
public | function |
Adds a Response. Overrides EsiResponseCacheStrategyInterface:: |
|
EsiResponseCacheStrategy:: |
public | function |
Updates the Response HTTP headers based on the embedded Responses. Overrides EsiResponseCacheStrategyInterface:: |