Размер файла: 1.75Kb
- <?php
-
- declare(strict_types=1);
-
- namespace App\Services;
-
- use Slim\Psr7\Cookies;
- use Slim\Psr7\Factory\ServerRequestFactory;
- use Slim\Psr7\Factory\StreamFactory;
- use Slim\Psr7\Factory\UriFactory;
- use Slim\Psr7\Headers;
- use Slim\Psr7\Stream;
- use Slim\Psr7\UploadedFile;
-
- class RequestFactory extends ServerRequestFactory
- {
- /**
- * Create new ServerRequest from environment.
- *
- * @return Request
- * @internal This method is not part of PSR-17
- */
- public static function createFromGlobals(): Request
- {
- $method = $_SERVER['REQUEST_METHOD'] ?? 'GET';
- $uri = (new UriFactory())->createFromGlobals($_SERVER);
-
- $headers = Headers::createFromGlobals();
- $cookies = Cookies::parseHeader($headers->getHeader('Cookie', []));
-
- // Cache the php://input stream as it cannot be re-read
- $cacheResource = fopen('php://temp', 'wb+');
- $cache = $cacheResource ? new Stream($cacheResource) : null;
-
- $body = (new StreamFactory())->createStreamFromFile('php://input', 'r', $cache);
- $uploadedFiles = UploadedFile::createFromGlobals($_SERVER);
-
- $request = new Request($method, $uri, $headers, $cookies, $_SERVER, $body, $uploadedFiles);
- $contentTypes = $request->getHeader('Content-Type') ?? [];
-
- $parsedContentType = '';
- foreach ($contentTypes as $contentType) {
- $fragments = explode(';', $contentType);
- $parsedContentType = current($fragments);
- }
-
- $contentTypesWithParsedBodies = ['application/x-www-form-urlencoded', 'multipart/form-data'];
- if ($method === 'POST' && in_array($parsedContentType, $contentTypesWithParsedBodies, true)) {
- return $request->withParsedBody($_POST);
- }
-
- return $request;
- }
- }