Skip to content

Commit e2fc524

Browse files
authored
feat: Add support for HTTP status in ResponseCache (codeigniter4#9855)
* feat: Added support for HTTP status in ResponseCache * Suggestions * Changelog
1 parent 877d1da commit e2fc524

File tree

3 files changed

+28
-1
lines changed

3 files changed

+28
-1
lines changed

system/Cache/ResponseCache.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,12 @@ public function make(CLIRequest|IncomingRequest $request, ResponseInterface $res
102102

103103
return $this->cache->save(
104104
$this->generateCacheKey($request),
105-
serialize(['headers' => $headers, 'output' => $response->getBody()]),
105+
serialize([
106+
'headers' => $headers,
107+
'output' => $response->getBody(),
108+
'status' => $response->getStatusCode(),
109+
'reason' => $response->getReasonPhrase(),
110+
]),
106111
$this->ttl,
107112
);
108113
}
@@ -127,6 +132,8 @@ public function get(CLIRequest|IncomingRequest $request, ResponseInterface $resp
127132

128133
$headers = $cachedResponse['headers'];
129134
$output = $cachedResponse['output'];
135+
$status = $cachedResponse['status'] ?? 200;
136+
$reason = $cachedResponse['reason'] ?? '';
130137

131138
// Clear all default headers
132139
foreach (array_keys($response->headers()) as $key) {
@@ -140,6 +147,8 @@ public function get(CLIRequest|IncomingRequest $request, ResponseInterface $resp
140147

141148
$response->setBody($output);
142149

150+
$response->setStatusCode($status, $reason);
151+
143152
return $response;
144153
}
145154

tests/system/Cache/ResponseCacheTest.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,23 @@ public function testCachePageIncomingRequest(): void
107107
$this->assertNotInstanceOf(ResponseInterface::class, $cachedResponse);
108108
}
109109

110+
public function testCachePageIncomingRequestWithStatus(): void
111+
{
112+
$pageCache = $this->createResponseCache();
113+
114+
$response = new Response(new App());
115+
$response->setStatusCode(432, 'Foo Bar');
116+
$response->setBody('The response body.');
117+
118+
$this->assertTrue($pageCache->make($this->createIncomingRequest('foo/bar'), $response));
119+
120+
// Check cached response status
121+
$cachedResponse = $pageCache->get($this->createIncomingRequest('foo/bar'), new Response(new App()));
122+
$this->assertInstanceOf(ResponseInterface::class, $cachedResponse);
123+
$this->assertSame(432, $cachedResponse->getStatusCode());
124+
$this->assertSame('Foo Bar', $cachedResponse->getReasonPhrase());
125+
}
126+
110127
public function testCachePageIncomingRequestWithCacheQueryString(): void
111128
{
112129
$cache = new Cache();

user_guide_src/source/changelogs/v4.7.0.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ Libraries
167167
- **CLI:** Added ``SignalTrait`` to provide unified handling of operating system signals in CLI commands.
168168
- **Cache:** Added ``async`` and ``persistent`` config item to Predis handler.
169169
- **Cache:** Added ``persistent`` config item to Redis handler.
170+
- **Cache:** Added support for HTTP status in ``ResponseCache``.
170171
- **CURLRequest:** Added ``shareConnection`` config item to change default share connection.
171172
- **CURLRequest:** Added ``dns_cache_timeout`` option to change default DNS cache timeout.
172173
- **CURLRequest:** Added ``fresh_connect`` options to enable/disable request fresh connection.

0 commit comments

Comments
 (0)