/
PsrResponseHandler.php
59 lines (49 loc) · 1.34 KB
/
PsrResponseHandler.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?php
declare(strict_types=1);
namespace FrontInterop\Impl;
use FrontInterop\ResponseHandlerInterface;
use Psr\Http\Message\ResponseInterface;
class PsrResponseHandler implements ResponseHandlerInterface
{
public function __construct(protected ResponseInterface $response)
{
}
public function handleResponse() : void
{
$this->sendHeaders();
$this->sendStatus();
$this->sendBody();
}
protected function sendHeaders() : void
{
foreach ($this->response->getHeaders() as $label => $values) {
$lower = strtolower($label);
$first = $lower !== 'set-cookie';
foreach ($values as $value) {
header("{$label}: {$value}", $first);
$first = false;
}
}
}
protected function sendStatus() : void
{
header(
sprintf(
'HTTP/%s %s %s',
$this->response->getProtocolVersion(),
$this->response->getStatusCode(),
$this->response->getReasonPhrase(),
),
true,
$this->response->getStatusCode(),
);
}
protected function sendBody() : void
{
$body = $this->response->getBody();
if ($body->isSeekable()) {
$body->rewind();
}
echo $body;
}
}