public function testCacheControlGetFieldValue() { $cacheControlHeader = new CacheControl(); $this->assertEmpty($cacheControlHeader->getFieldValue()); $cacheControlHeader->addDirective('xxx'); $this->assertEquals('xxx', $cacheControlHeader->getFieldValue()); $cacheControlHeader->addDirective('aaa'); $this->assertEquals('aaa, xxx', $cacheControlHeader->getFieldValue()); $cacheControlHeader->addDirective('yyy', 'foo'); $this->assertEquals('aaa, xxx, yyy=foo', $cacheControlHeader->getFieldValue()); $cacheControlHeader->addDirective('zzz', 'bar, baz'); $this->assertEquals('aaa, xxx, yyy=foo, zzz="bar, baz"', $cacheControlHeader->getFieldValue()); }
protected function completeGet(array $document, ClassMetadata $metadata) { $serializer = $this->options->getSerializer(); if (isset($metadata->rest['cache'])) { $cacheControl = new CacheControl(); foreach ($metadata->rest['cache'] as $key => $value) { $cacheControl->addDirective($key, $value); } $this->response->getHeaders()->addHeader($cacheControl); } if (isset($metadata->stamp['updatedOn'])) { $lastModified = new LastModified(); $sec = $document[$metadata->stamp['updatedOn']]->sec; $lastModified->setDate(new \DateTime("@{$sec}")); $this->response->getHeaders()->addHeader($lastModified); } return $serializer->applySerializeMetadataToArray($document, $metadata->name); }
public function getCacheControl() { if (!$this->cacheControl instanceof CacheControl) { $cacheControl = new CacheControl(); if (isset($this->cacheControl['public'])) { $cacheControl->addDirective('public', true); } if (isset($this->cacheControl['private'])) { $cacheControl->addDirective('private', true); } if (isset($this->cacheControl['no_cache'])) { $cacheControl->addDirective('no-cache', true); } if (isset($this->cacheControl['max_age'])) { $cacheControl->addDirective('max-age', $this->cacheControl['max_age']); } $this->cacheControl = $cacheControl; } return $this->cacheControl; }
/** * * @param MvcEvent $e */ public function injectCacheHeader(MvcEvent $e) { $cacheEvent = clone $e; $cacheEvent->setTarget($this); $cacheEvent->setName(self::EVENT_DETERMINE_TTL); if ($this->varnishOptions->isCacheEnabled()) { $result = $this->getEventManager()->trigger($cacheEvent, function ($result) { return $result instanceof CachingStrategyInterface; }); /** @var CachingStrategyInterface $strategy */ $strategy = $result->last(); $ttl = $strategy->getTtl(); } else { $ttl = 0; } $headers = $e->getResponse()->getHeaders(); if ($this->varnishOptions->getDebug()) { $debugValue = isset($strategy) ? get_class($strategy) : 'caching disabled'; $debug = new GenericHeader(self::HEADER_CACHE_DEBUG, $debugValue); $headers->addHeader($debug); } $cacheControl = new CacheControl(); $directives = ['no-store' => true, 'no-cache' => true, 'must-revalidate' => true, 'post-check' => 0, 'pre-check' => 0, 's-maxage' => $ttl]; foreach ($directives as $directive => $value) { $cacheControl->addDirective($directive, $value); } $headers->addHeader($cacheControl); $this->setTtl($ttl); }
/** * Cache Response for future requests * * @param MvcEvent $e * @return \Zend\Stdlib\ResponseInterface */ public function onFinish(MvcEvent $e) { $request = $e->getRequest(); if (!$request instanceof HttpRequest) { return; } if (!$request->isGet()) { return; } $response = $e->getResponse(); if ($response instanceof HttpResponse && !$response->isOk()) { return; } // Do not continue if weren't able to compose a key if (empty($this->cache_key)) { return; } if (!$this->cacheAdapter->hasItem($this->cache_key)) { $resourceIdentifier = $e->getRouteMatch()->getParam('resource'); $resource = call_user_func($this->getResourceLocatorService(), $resourceIdentifier); if (!$resource instanceof Resource || !$resource->isCacheable()) { return; } // Generate Response cache headers based on Resource CacheOptions $cacheOptions = $resource->getCacheOptions(); $cacheControl = new CacheControl(); $cacheControl->addDirective($cacheOptions->getAccess()); $cacheControl->addDirective('max-age', $cacheOptions->getMaxAge()); $cacheControl->addDirective('expires', $cacheOptions->getExpires()); $cacheControl->addDirective('must-revalidate'); $dateTime = new \DateTime(); $dateTime->modify('+ ' . $cacheOptions->getExpires() . 'seconds'); $expires = new Expires(); $expires->setDate($dateTime); $lastModified = new LastModified(); $lastModified->setDate(new \DateTime()); // Add Headers to Response Header $response->getHeaders()->addHeader($cacheControl); $response->getHeaders()->addHeader($expires); $response->getHeaders()->addHeaderLine('Pragma: ' . $cacheOptions->getAccess()); $response->getHeaders()->addHeader(Etag::fromString('Etag: ' . md5($response->getBody()))); $response->getHeaders()->addHeader($lastModified); // Set cache adapter's TTL using Resource cache expires value $this->cacheAdapter->getOptions()->setTtl($cacheOptions->getExpires()); $this->cacheAdapter->setItem($this->cache_key, $response); //return $response; } }