| 1 | 1 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,94 @@ |
| 1 |
+<?php |
|
| 2 |
+ |
|
| 3 |
+declare(strict_types=1); |
|
| 4 |
+ |
|
| 5 |
+namespace GuzzleHttp\Psr7; |
|
| 6 |
+ |
|
| 7 |
+use Psr\Http\Message\RequestFactoryInterface; |
|
| 8 |
+use Psr\Http\Message\RequestInterface; |
|
| 9 |
+use Psr\Http\Message\ResponseFactoryInterface; |
|
| 10 |
+use Psr\Http\Message\ResponseInterface; |
|
| 11 |
+use Psr\Http\Message\ServerRequestFactoryInterface; |
|
| 12 |
+use Psr\Http\Message\ServerRequestInterface; |
|
| 13 |
+use Psr\Http\Message\StreamFactoryInterface; |
|
| 14 |
+use Psr\Http\Message\StreamInterface; |
|
| 15 |
+use Psr\Http\Message\UploadedFileFactoryInterface; |
|
| 16 |
+use Psr\Http\Message\UploadedFileInterface; |
|
| 17 |
+use Psr\Http\Message\UriFactoryInterface; |
|
| 18 |
+use Psr\Http\Message\UriInterface; |
|
| 19 |
+ |
|
| 20 |
+/** |
|
| 21 |
+ * Implements all of the PSR-17 interfaces. |
|
| 22 |
+ * |
|
| 23 |
+ * Note: in consuming code it is recommended to require the implemented interfaces |
|
| 24 |
+ * and inject the instance of this class multiple times. |
|
| 25 |
+ */ |
|
| 26 |
+final class HttpFactory implements RequestFactoryInterface, ResponseFactoryInterface, ServerRequestFactoryInterface, StreamFactoryInterface, UploadedFileFactoryInterface, UriFactoryInterface |
|
| 27 |
+{
|
|
| 28 |
+ public function createUploadedFile( |
|
| 29 |
+ StreamInterface $stream, |
|
| 30 |
+ ?int $size = null, |
|
| 31 |
+ int $error = \UPLOAD_ERR_OK, |
|
| 32 |
+ ?string $clientFilename = null, |
|
| 33 |
+ ?string $clientMediaType = null |
|
| 34 |
+ ): UploadedFileInterface {
|
|
| 35 |
+ if ($size === null) {
|
|
| 36 |
+ $size = $stream->getSize(); |
|
| 37 |
+ } |
|
| 38 |
+ |
|
| 39 |
+ return new UploadedFile($stream, $size, $error, $clientFilename, $clientMediaType); |
|
| 40 |
+ } |
|
| 41 |
+ |
|
| 42 |
+ public function createStream(string $content = ''): StreamInterface |
|
| 43 |
+ {
|
|
| 44 |
+ return Utils::streamFor($content); |
|
| 45 |
+ } |
|
| 46 |
+ |
|
| 47 |
+ public function createStreamFromFile(string $file, string $mode = 'r'): StreamInterface |
|
| 48 |
+ {
|
|
| 49 |
+ try {
|
|
| 50 |
+ $resource = Utils::tryFopen($file, $mode); |
|
| 51 |
+ } catch (\RuntimeException $e) {
|
|
| 52 |
+ if ('' === $mode || false === \in_array($mode[0], ['r', 'w', 'a', 'x', 'c'], true)) {
|
|
| 53 |
+ throw new \InvalidArgumentException(sprintf('Invalid file opening mode "%s"', $mode), 0, $e);
|
|
| 54 |
+ } |
|
| 55 |
+ |
|
| 56 |
+ throw $e; |
|
| 57 |
+ } |
|
| 58 |
+ |
|
| 59 |
+ return Utils::streamFor($resource); |
|
| 60 |
+ } |
|
| 61 |
+ |
|
| 62 |
+ public function createStreamFromResource($resource): StreamInterface |
|
| 63 |
+ {
|
|
| 64 |
+ return Utils::streamFor($resource); |
|
| 65 |
+ } |
|
| 66 |
+ |
|
| 67 |
+ public function createServerRequest(string $method, $uri, array $serverParams = []): ServerRequestInterface |
|
| 68 |
+ {
|
|
| 69 |
+ if (empty($method)) {
|
|
| 70 |
+ if (!empty($serverParams['REQUEST_METHOD'])) {
|
|
| 71 |
+ $method = $serverParams['REQUEST_METHOD']; |
|
| 72 |
+ } else {
|
|
| 73 |
+ throw new \InvalidArgumentException('Cannot determine HTTP method');
|
|
| 74 |
+ } |
|
| 75 |
+ } |
|
| 76 |
+ |
|
| 77 |
+ return new ServerRequest($method, $uri, [], null, '1.1', $serverParams); |
|
| 78 |
+ } |
|
| 79 |
+ |
|
| 80 |
+ public function createResponse(int $code = 200, string $reasonPhrase = ''): ResponseInterface |
|
| 81 |
+ {
|
|
| 82 |
+ return new Response($code, [], null, '1.1', $reasonPhrase); |
|
| 83 |
+ } |
|
| 84 |
+ |
|
| 85 |
+ public function createRequest(string $method, $uri): RequestInterface |
|
| 86 |
+ {
|
|
| 87 |
+ return new Request($method, $uri); |
|
| 88 |
+ } |
|
| 89 |
+ |
|
| 90 |
+ public function createUri(string $uri = ''): UriInterface |
|
| 91 |
+ {
|
|
| 92 |
+ return new Uri($uri); |
|
| 93 |
+ } |
|
| 94 |
+} |