Passed
Push — master ( eb38d0...297af8 )
by Thomas
01:48
created

DiactorosFactory::createUploadedFile()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 5
dl 0
loc 8
rs 10
c 0
b 0
f 0
1
<?php
2
declare(strict_types=1);
3
4
namespace Tebe\HttpFactory\Factory;
5
6
use Psr\Http\Message\ResponseInterface;
7
use Psr\Http\Message\ServerRequestInterface;
8
use Psr\Http\Message\StreamInterface;
9
use Psr\Http\Message\UploadedFileInterface;
10
use Psr\Http\Message\UriInterface;
11
use Zend\Diactoros\Response;
12
use Zend\Diactoros\ServerRequest;
13
use Zend\Diactoros\Stream;
14
use Zend\Diactoros\UploadedFile;
15
use Zend\Diactoros\Uri;
16
17
/**
18
 * Simple class to create response instances of PSR-7 classes.
19
 */
20
class DiactorosFactory implements FactoryInterface
21
{
22
    /**
23
     * Check whether Zend Diactoros is available
24
     */
25
    public static function isInstalled(): bool
26
    {
27
        return class_exists('Zend\\Diactoros\\Response')
28
            && class_exists('Zend\\Diactoros\\ServerRequest')
29
            && class_exists('Zend\\Diactoros\\Stream')
30
            && class_exists('Zend\\Diactoros\\Uri');
31
    }
32
33
    /**
34
     * @inheritdoc
35
     */
36
    public function createResponse(int $code = 200, string $reasonPhrase = ''): ResponseInterface
37
    {
38
        $response = new Response('php://memory', $code);
39
40
        return $reasonPhrase !== '' ? $response->withStatus($code, $reasonPhrase) : $response;
41
    }
42
43
    /**
44
     * @inheritdoc
45
     */
46
    public function createServerRequest(string $method, $uri, array $serverParams = []): ServerRequestInterface
47
    {
48
        return new ServerRequest(
49
            $serverParams,
50
            [],
51
            $uri,
52
            $method,
53
            $this->createStream()
54
        );
55
    }
56
57
    /**
58
     * @inheritdoc
59
     */
60
    public function createStream(string $content = ''): StreamInterface
61
    {
62
        $stream = $this->createStreamFromFile('php://temp', 'r+');
63
        $stream->write($content);
64
65
        return $stream;
66
    }
67
68
    /**
69
     * @inheritdoc
70
     */
71
    public function createStreamFromFile(string $filename, string $mode = 'r'): StreamInterface
72
    {
73
        $resource = fopen($filename, $mode);
74
        return $this->createStreamFromResource($resource);
75
    }
76
77
    /**
78
     * @inheritdoc
79
     */
80
    public function createStreamFromResource($resource): StreamInterface
81
    {
82
        return new Stream($resource);
83
    }
84
85
    /**
86
     * @inheritdoc
87
     */
88
    public function createUri(string $uri = ''): UriInterface
89
    {
90
        return new Uri($uri);
91
    }
92
93
    /**
94
     * @inheritdoc
95
     */
96
    public function createUploadedFile(
97
        StreamInterface $stream,
98
        int $size = null,
99
        int $error = \UPLOAD_ERR_OK,
100
        string $clientFilename = null,
101
        string $clientMediaType = null
102
    ): UploadedFileInterface {
103
        return new UploadedFile($stream, $size, $error, $clientFilename, $clientMediaType);
104
    }
105
}
106