Completed
Push — master ( 9bdca5...3c9104 )
by Alexander
12:12
created

SapiEmitter::withoutBody()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 3
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 5
rs 10
1
<?php declare(strict_types=1);
2
3
namespace Yiisoft\Yii\Web\Emitter;
4
5
use Psr\Http\Message\ResponseInterface;
6
7
/**
8
 * SapiEmitter sends a response using PHP Server API
9
 */
10
final class SapiEmitter implements EmitterInterface
11
{
12
    private $withoutBody = false;
13
14
    public function emit(ResponseInterface $response): bool
15
    {
16
        $status = $response->getStatusCode();
17
18
        foreach ($response->getHeaders() as $header => $values) {
19
            foreach ($values as $value) {
20
                header(sprintf(
21
                    '%s: %s',
22
                    $header,
23
                    $value
24
                ), $header !== 'Set-Cookie', $status);
25
            }
26
        }
27
28
        $reason = $response->getReasonPhrase();
29
        $status = $response->getStatusCode();
30
31
        header(sprintf(
32
            'HTTP/%s %d%s',
33
            $response->getProtocolVersion(),
34
            $status,
35
            ($reason !== '' ? ' ' . $reason : '')
36
        ), true, $status);
37
38
        if (!$this->withoutBody) {
39
            echo $response->getBody();
40
        }
41
42
        return true;
43
    }
44
45
    public function withoutBody(): EmitterInterface
46
    {
47
        $new = clone $this;
48
        $new->withoutBody = true;
49
        return $new;
50
    }
51
}
52