Exemplo n.º 1
0
 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;
     }
 }