Skip to content

Commit 7d2d4b2

Browse files
committed
feat: add check if headers() returns array
1 parent 76aac71 commit 7d2d4b2

File tree

5 files changed

+80
-17
lines changed

5 files changed

+80
-17
lines changed

app/Views/errors/html/error_exception.php

+26-7
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<?php
2+
use CodeIgniter\HTTP\Header;
23
use Config\Services;
34
use CodeIgniter\CodeIgniter;
45

@@ -289,10 +290,20 @@
289290
</tr>
290291
</thead>
291292
<tbody>
292-
<?php foreach ($headers as $header) : ?>
293+
<?php foreach ($headers as $name => $value) : ?>
293294
<tr>
294-
<td><?= esc($header->getName(), 'html') ?></td>
295-
<td><?= esc($header->getValueLine(), 'html') ?></td>
295+
<td><?= esc($name, 'html') ?></td>
296+
<td>
297+
<?php
298+
if ($value instanceof Header) {
299+
echo esc($value->getValueLine(), 'html');
300+
} else {
301+
foreach ($value as $i => $header) {
302+
echo ' ('. $i+1 . ') ' . esc($header->getValueLine(), 'html');
303+
}
304+
}
305+
?>
306+
</td>
296307
</tr>
297308
<?php endforeach; ?>
298309
</tbody>
@@ -316,8 +327,6 @@
316327

317328
<?php $headers = $response->headers(); ?>
318329
<?php if (! empty($headers)) : ?>
319-
<?php natsort($headers) ?>
320-
321330
<h3>Headers</h3>
322331

323332
<table>
@@ -328,10 +337,20 @@
328337
</tr>
329338
</thead>
330339
<tbody>
331-
<?php foreach (array_keys($headers) as $name) : ?>
340+
<?php foreach ($headers as $name => $value) : ?>
332341
<tr>
333342
<td><?= esc($name, 'html') ?></td>
334-
<td><?= esc($response->getHeaderLine($name), 'html') ?></td>
343+
<td>
344+
<?php
345+
if ($value instanceof Header) {
346+
echo esc($response->getHeaderLine($name), 'html');
347+
} else {
348+
foreach ($value as $i => $header) {
349+
echo ' ('. $i+1 . ') ' . esc($header->getValueLine(), 'html');
350+
}
351+
}
352+
?>
353+
</td>
335354
</tr>
336355
<?php endforeach; ?>
337356
</tbody>

system/Cache/ResponseCache.php

+9-2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace CodeIgniter\Cache;
1313

1414
use CodeIgniter\HTTP\CLIRequest;
15+
use CodeIgniter\HTTP\Header;
1516
use CodeIgniter\HTTP\IncomingRequest;
1617
use CodeIgniter\HTTP\ResponseInterface;
1718
use Config\Cache as CacheConfig;
@@ -99,8 +100,14 @@ public function make($request, ResponseInterface $response): bool
99100

100101
$headers = [];
101102

102-
foreach ($response->headers() as $header) {
103-
$headers[$header->getName()] = $header->getValueLine();
103+
foreach ($response->headers() as $name => $value) {
104+
if ($value instanceof Header) {
105+
$headers[$name] = $value->getValueLine();
106+
} else {
107+
foreach ($value as $header) {
108+
$headers[$name][] = $header->getValueLine();
109+
}
110+
}
104111
}
105112

106113
return $this->cache->save(

system/Debug/Toolbar.php

+21-4
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use CodeIgniter\Format\JSONFormatter;
1919
use CodeIgniter\Format\XMLFormatter;
2020
use CodeIgniter\HTTP\DownloadResponse;
21+
use CodeIgniter\HTTP\Header;
2122
use CodeIgniter\HTTP\IncomingRequest;
2223
use CodeIgniter\HTTP\RequestInterface;
2324
use CodeIgniter\HTTP\ResponseInterface;
@@ -140,8 +141,16 @@ public function run(float $startTime, float $totalTime, RequestInterface $reques
140141
$data['vars']['post'][esc($name)] = is_array($value) ? '<pre>' . esc(print_r($value, true)) . '</pre>' : esc($value);
141142
}
142143

143-
foreach ($request->headers() as $header) {
144-
$data['vars']['headers'][esc($header->getName())] = esc($header->getValueLine());
144+
foreach ($request->headers() as $name => $value) {
145+
if ($value instanceof Header) {
146+
$data['vars']['headers'][esc($name)] = esc($value->getValueLine());
147+
} else {
148+
foreach ($value as $i => $header) {
149+
$data['vars']['headers'][esc($name)] ??= '';
150+
$data['vars']['headers'][esc($name)] .= ' (' . $i + 1 . ') '
151+
. esc($header->getValueLine());
152+
}
153+
}
145154
}
146155

147156
foreach ($request->getCookie() as $name => $value) {
@@ -157,8 +166,16 @@ public function run(float $startTime, float $totalTime, RequestInterface $reques
157166
'headers' => [],
158167
];
159168

160-
foreach ($response->headers() as $header) {
161-
$data['vars']['response']['headers'][esc($header->getName())] = esc($header->getValueLine());
169+
foreach ($response->headers() as $name => $value) {
170+
if ($value instanceof Header) {
171+
$data['vars']['response']['headers'][esc($name)] = esc($value->getValueLine());
172+
} else {
173+
foreach ($value as $i => $header) {
174+
$data['vars']['response']['headers'][esc($name)] ??= '';
175+
$data['vars']['response']['headers'][esc($name)] .= ' (' . $i + 1 . ') '
176+
. esc($header->getValueLine());
177+
}
178+
}
162179
}
163180

164181
$data['config'] = Config::display();

system/HTTP/RedirectResponse.php

+8-2
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,14 @@ public function withCookies()
161161
*/
162162
public function withHeaders()
163163
{
164-
foreach (Services::response()->headers() as $name => $header) {
165-
$this->setHeader($name, $header->getValue());
164+
foreach (Services::response()->headers() as $name => $value) {
165+
if ($value instanceof Header) {
166+
$this->setHeader($name, $value->getValue());
167+
} else {
168+
foreach ($value as $header) {
169+
$this->addHeader($name, $header->getValue());
170+
}
171+
}
166172
}
167173

168174
return $this;

system/HTTP/ResponseTrait.php

+16-2
Original file line numberDiff line numberDiff line change
@@ -398,8 +398,22 @@ public function sendHeaders()
398398
header(sprintf('HTTP/%s %s %s', $this->getProtocolVersion(), $this->getStatusCode(), $this->getReasonPhrase()), true, $this->getStatusCode());
399399

400400
// Send all of our headers
401-
foreach (array_keys($this->headers()) as $name) {
402-
header($name . ': ' . $this->getHeaderLine($name), false, $this->getStatusCode());
401+
foreach ($this->headers() as $name => $value) {
402+
if ($value instanceof Header) {
403+
header(
404+
$name . ': ' . $value->getValueLine(),
405+
false,
406+
$this->getStatusCode()
407+
);
408+
} else {
409+
foreach ($value as $header) {
410+
header(
411+
$name . ': ' . $header->getValueLine(),
412+
false,
413+
$this->getStatusCode()
414+
);
415+
}
416+
}
403417
}
404418

405419
return $this;

0 commit comments

Comments
 (0)