Skip to content

Commit

Permalink
Merge pull request #598 from flightphp/cache-control
Browse files Browse the repository at this point in the history
Changed default cache behavior
  • Loading branch information
n0nag0n authored Jul 4, 2024
2 parents 9f5457e + ba80e04 commit 8dd255c
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 16 deletions.
28 changes: 19 additions & 9 deletions flight/net/Response.php
Original file line number Diff line number Diff line change
Expand Up @@ -288,13 +288,7 @@ public function cache($expires): self
{
if ($expires === false) {
$this->headers['Expires'] = 'Mon, 26 Jul 1997 05:00:00 GMT';

$this->headers['Cache-Control'] = [
'no-store, no-cache, must-revalidate',
'post-check=0, pre-check=0',
'max-age=0',
];

$this->headers['Cache-Control'] = 'no-store, no-cache, must-revalidate, max-age=0';
$this->headers['Pragma'] = 'no-cache';
} else {
$expires = \is_int($expires) ? $expires : strtotime($expires);
Expand Down Expand Up @@ -437,15 +431,31 @@ public function send(): void
$this->processResponseCallbacks();
}

if (headers_sent() === false) {
$this->sendHeaders(); // @codeCoverageIgnore
if ($this->headersSent() === false) {
// If you haven't set a Cache-Control header, we'll assume you don't want caching
if ($this->getHeader('Cache-Control') === null) {
$this->cache(false);
}

$this->sendHeaders();
}

echo $this->body;

$this->sent = true;
}

/**
* Headers have been sent
*
* @return bool
* @codeCoverageIgnore
*/
public function headersSent(): bool
{
return headers_sent();
}

/**
* Adds a callback to process the response body before it's sent. These are processed in the order
* they are added
Expand Down
3 changes: 1 addition & 2 deletions tests/FlightTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -361,8 +361,7 @@ public function testDoesNotPreserveVarsWhenFlagIsDisabled(
string $output,
array $renderParams,
string $regexp
): void
{
): void {
Flight::view()->preserveVars = false;

$this->expectOutputString($output);
Expand Down
46 changes: 41 additions & 5 deletions tests/ResponseTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -164,11 +164,7 @@ public function testCacheFalseExpiresValue()
$response->cache(false);
$this->assertEquals([
'Expires' => 'Mon, 26 Jul 1997 05:00:00 GMT',
'Cache-Control' => [
'no-store, no-cache, must-revalidate',
'post-check=0, pre-check=0',
'max-age=0',
],
'Cache-Control' => 'no-store, no-cache, must-revalidate, max-age=0',
'Pragma' => 'no-cache'
], $response->headers());
}
Expand Down Expand Up @@ -239,6 +235,46 @@ public function setRealHeader(string $header_string, bool $replace = true, int $
$this->assertTrue($response->sent());
}

public function testSendWithNoHeadersSent()
{
$response = new class extends Response {
protected $test_sent_headers = [];

public function setRealHeader(string $header_string, bool $replace = true, int $response_code = 0): self
{
$this->test_sent_headers[] = $header_string;
return $this;
}

public function getSentHeaders(): array
{
return $this->test_sent_headers;
}

public function headersSent(): bool
{
return false;
}
};
$response->header('Content-Type', 'text/html');
$response->header('X-Test', 'test');
$response->write('Something');

$this->expectOutputString('Something');

$response->send();
$sent_headers = $response->getSentHeaders();
$this->assertEquals([
'HTTP/1.1 200 OK',
'Content-Type: text/html',
'X-Test: test',
'Expires: Mon, 26 Jul 1997 05:00:00 GMT',
'Cache-Control: no-store, no-cache, must-revalidate, max-age=0',
'Pragma: no-cache',
'Content-Length: 9'
], $sent_headers);
}

public function testClearBody()
{
$response = new Response();
Expand Down

0 comments on commit 8dd255c

Please sign in to comment.