api de gestion de ticket, basé sur php-crud-api. Le but est de décorrélé les outils de gestion des données, afin
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

RequestFactory.php 1.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. <?php
  2. namespace Tqdev\PhpCrudApi;
  3. use Nyholm\Psr7\Factory\Psr17Factory;
  4. use Nyholm\Psr7Server\ServerRequestCreator;
  5. use Psr\Http\Message\ServerRequestInterface;
  6. class RequestFactory
  7. {
  8. public static function fromGlobals(): ServerRequestInterface
  9. {
  10. $psr17Factory = new Psr17Factory();
  11. $creator = new ServerRequestCreator($psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory);
  12. $serverRequest = $creator->fromGlobals();
  13. $stream = $psr17Factory->createStreamFromFile('php://input');
  14. $serverRequest = $serverRequest->withBody($stream);
  15. return $serverRequest;
  16. }
  17. public static function fromString(string $request): ServerRequestInterface
  18. {
  19. $parts = explode("\n\n", trim($request), 2);
  20. $lines = explode("\n", $parts[0]);
  21. $first = explode(' ', trim(array_shift($lines)), 2);
  22. $method = $first[0];
  23. $body = isset($parts[1]) ? $parts[1] : '';
  24. $url = isset($first[1]) ? $first[1] : '';
  25. $psr17Factory = new Psr17Factory();
  26. $serverRequest = $psr17Factory->createServerRequest($method, $url);
  27. foreach ($lines as $line) {
  28. list($key, $value) = explode(':', $line, 2);
  29. $serverRequest = $serverRequest->withAddedHeader($key, $value);
  30. }
  31. if ($body) {
  32. $stream = $psr17Factory->createStream($body);
  33. $stream->rewind();
  34. $serverRequest = $serverRequest->withBody($stream);
  35. }
  36. return $serverRequest;
  37. }
  38. }