Просмотр файла app/Services/RequestFactory.php

Размер файла: 1.75Kb
  1. <?php
  2.  
  3. declare(strict_types=1);
  4.  
  5. namespace App\Services;
  6.  
  7. use Slim\Psr7\Cookies;
  8. use Slim\Psr7\Factory\ServerRequestFactory;
  9. use Slim\Psr7\Factory\StreamFactory;
  10. use Slim\Psr7\Factory\UriFactory;
  11. use Slim\Psr7\Headers;
  12. use Slim\Psr7\Stream;
  13. use Slim\Psr7\UploadedFile;
  14.  
  15. class RequestFactory extends ServerRequestFactory
  16. {
  17. /**
  18. * Create new ServerRequest from environment.
  19. *
  20. * @return Request
  21. * @internal This method is not part of PSR-17
  22. */
  23. public static function createFromGlobals(): Request
  24. {
  25. $method = $_SERVER['REQUEST_METHOD'] ?? 'GET';
  26. $uri = (new UriFactory())->createFromGlobals($_SERVER);
  27.  
  28. $headers = Headers::createFromGlobals();
  29. $cookies = Cookies::parseHeader($headers->getHeader('Cookie', []));
  30.  
  31. // Cache the php://input stream as it cannot be re-read
  32. $cacheResource = fopen('php://temp', 'wb+');
  33. $cache = $cacheResource ? new Stream($cacheResource) : null;
  34.  
  35. $body = (new StreamFactory())->createStreamFromFile('php://input', 'r', $cache);
  36. $uploadedFiles = UploadedFile::createFromGlobals($_SERVER);
  37.  
  38. $request = new Request($method, $uri, $headers, $cookies, $_SERVER, $body, $uploadedFiles);
  39. $contentTypes = $request->getHeader('Content-Type') ?? [];
  40.  
  41. $parsedContentType = '';
  42. foreach ($contentTypes as $contentType) {
  43. $fragments = explode(';', $contentType);
  44. $parsedContentType = current($fragments);
  45. }
  46.  
  47. $contentTypesWithParsedBodies = ['application/x-www-form-urlencoded', 'multipart/form-data'];
  48. if ($method === 'POST' && in_array($parsedContentType, $contentTypesWithParsedBodies, true)) {
  49. return $request->withParsedBody($_POST);
  50. }
  51.  
  52. return $request;
  53. }
  54. }