private function buildResponse($status, $context, $result) { $mediaType = $context->getMediaType(); $lastModified = $context->value('last-modified'); $response = Response::create('', $status); if (!$context->getRequest()->isMethod('HEAD')) { $response->setContent(is_string($result) ? $result : $this->serialize($result, $mediaType)); } Utils::setHeadersMaybe($response, ['Location' => $context->getLocation(), 'Vary' => $this->buildVaryHeader($context), 'Content-Type' => $mediaType, 'Last-Modified' => $lastModified ? Utils::httpDate($lastModified) : null, 'ETag' => $context->value('etag')]); return $response; }
function testIfModifiedSinceConditionalRequest() { $lastModified = new \DateTime(); $resource = Resource::create()->lastModified($lastModified); $response = $this->GET($resource, ['If-Modified-Since' => Utils::httpDate($lastModified)]); $this->assertStatusCode(Response::HTTP_NOT_MODIFIED, $response); $this->assertEquals(Utils::httpDate($lastModified), $response->headers->get('Last-Modified')); $ifModSince = clone $lastModified; $ifModSince->modify('-1 hour'); $response = $this->GET($resource, ['If-Modified-Since' => Utils::httpDate($ifModSince)]); $this->assertStatusCode(Response::HTTP_OK, $response); $this->assertEquals(Utils::httpDate($lastModified), $response->headers->get('Last-Modified')); }