vendor/store.shopware.com/nrlejpostdirektautocomplete/vendor/slim/psr7/src/Request.php line 28

Open in your IDE?
  1. <?php
  2. /**
  3.  * Slim Framework (https://slimframework.com)
  4.  *
  5.  * @license https://github.com/slimphp/Slim-Psr7/blob/master/LICENSE.md (MIT License)
  6.  */
  7. declare (strict_types=1);
  8. namespace NRLEJPostDirektAutocomplete\Slim\Psr7;
  9. use InvalidArgumentException;
  10. use Psr\Http\Message\ServerRequestInterface;
  11. use Psr\Http\Message\StreamInterface;
  12. use Psr\Http\Message\UploadedFileInterface;
  13. use Psr\Http\Message\UriInterface;
  14. use NRLEJPostDirektAutocomplete\Slim\Psr7\Interfaces\HeadersInterface;
  15. use function get_class;
  16. use function gettype;
  17. use function is_array;
  18. use function is_null;
  19. use function is_object;
  20. use function is_string;
  21. use function ltrim;
  22. use function parse_str;
  23. use function preg_match;
  24. use function sprintf;
  25. use function str_replace;
  26. class Request extends \NRLEJPostDirektAutocomplete\Slim\Psr7\Message implements \Psr\Http\Message\ServerRequestInterface
  27. {
  28.     /**
  29.      * @var string
  30.      */
  31.     protected $method;
  32.     /**
  33.      * @var UriInterface
  34.      */
  35.     protected $uri;
  36.     /**
  37.      * @var string
  38.      */
  39.     protected $requestTarget;
  40.     /**
  41.      * @var ?array
  42.      */
  43.     protected $queryParams;
  44.     /**
  45.      * @var array
  46.      */
  47.     protected $cookies;
  48.     /**
  49.      * @var array
  50.      */
  51.     protected $serverParams;
  52.     /**
  53.      * @var array
  54.      */
  55.     protected $attributes;
  56.     /**
  57.      * @var null|array|object
  58.      */
  59.     protected $parsedBody;
  60.     /**
  61.      * @var UploadedFileInterface[]
  62.      */
  63.     protected $uploadedFiles;
  64.     /**
  65.      * @param string           $method        The request method
  66.      * @param UriInterface     $uri           The request URI object
  67.      * @param HeadersInterface $headers       The request headers collection
  68.      * @param array            $cookies       The request cookies collection
  69.      * @param array            $serverParams  The server environment variables
  70.      * @param StreamInterface  $body          The request body object
  71.      * @param array            $uploadedFiles The request uploadedFiles collection
  72.      * @throws InvalidArgumentException on invalid HTTP method
  73.      */
  74.     public function __construct($method\Psr\Http\Message\UriInterface $uri\NRLEJPostDirektAutocomplete\Slim\Psr7\Interfaces\HeadersInterface $headers, array $cookies, array $serverParams\Psr\Http\Message\StreamInterface $body, array $uploadedFiles = [])
  75.     {
  76.         $this->method $this->filterMethod($method);
  77.         $this->uri $uri;
  78.         $this->headers $headers;
  79.         $this->cookies $cookies;
  80.         $this->serverParams $serverParams;
  81.         $this->attributes = [];
  82.         $this->body $body;
  83.         $this->uploadedFiles $uploadedFiles;
  84.         if (isset($serverParams['SERVER_PROTOCOL'])) {
  85.             $this->protocolVersion \str_replace('HTTP/'''$serverParams['SERVER_PROTOCOL']);
  86.         }
  87.         if (!$this->headers->hasHeader('Host') || $this->uri->getHost() !== '') {
  88.             $this->headers->setHeader('Host'$this->uri->getHost());
  89.         }
  90.     }
  91.     /**
  92.      * This method is applied to the cloned object after PHP performs an initial shallow-copy.
  93.      * This method completes a deep-copy by creating new objects for the cloned object's internal reference pointers.
  94.      */
  95.     public function __clone()
  96.     {
  97.         $this->headers = clone $this->headers;
  98.         $this->body = clone $this->body;
  99.     }
  100.     /**
  101.      * {@inheritdoc}
  102.      */
  103.     public function getMethod() : string
  104.     {
  105.         return $this->method;
  106.     }
  107.     /**
  108.      * {@inheritdoc}
  109.      */
  110.     public function withMethod($method)
  111.     {
  112.         $method $this->filterMethod($method);
  113.         $clone = clone $this;
  114.         $clone->method $method;
  115.         return $clone;
  116.     }
  117.     /**
  118.      * Validate the HTTP method
  119.      *
  120.      * @param  string $method
  121.      *
  122.      * @return string
  123.      *
  124.      * @throws InvalidArgumentException on invalid HTTP method.
  125.      */
  126.     protected function filterMethod($method) : string
  127.     {
  128.         /** @var mixed $method */
  129.         if (!\is_string($method)) {
  130.             throw new \InvalidArgumentException(\sprintf('Unsupported HTTP method; must be a string, received %s'\is_object($method) ? \get_class($method) : \gettype($method)));
  131.         }
  132.         if (\preg_match("/^[!#\$%&'*+.^_`|~0-9a-z-]+\$/i"$method) !== 1) {
  133.             throw new \InvalidArgumentException(\sprintf('Unsupported HTTP method "%s" provided'$method));
  134.         }
  135.         return $method;
  136.     }
  137.     /**
  138.      * {@inheritdoc}
  139.      */
  140.     public function getRequestTarget() : string
  141.     {
  142.         if ($this->requestTarget) {
  143.             return $this->requestTarget;
  144.         }
  145.         if ($this->uri === null) {
  146.             return '/';
  147.         }
  148.         $path $this->uri->getPath();
  149.         $path '/' \ltrim($path'/');
  150.         $query $this->uri->getQuery();
  151.         if ($query) {
  152.             $path .= '?' $query;
  153.         }
  154.         return $path;
  155.     }
  156.     /**
  157.      * {@inheritdoc}
  158.      */
  159.     public function withRequestTarget($requestTarget)
  160.     {
  161.         if (\preg_match('#\\s#'$requestTarget)) {
  162.             throw new \InvalidArgumentException('Invalid request target provided; must be a string and cannot contain whitespace');
  163.         }
  164.         $clone = clone $this;
  165.         $clone->requestTarget $requestTarget;
  166.         return $clone;
  167.     }
  168.     /**
  169.      * {@inheritdoc}
  170.      */
  171.     public function getUri() : \Psr\Http\Message\UriInterface
  172.     {
  173.         return $this->uri;
  174.     }
  175.     /**
  176.      * {@inheritdoc}
  177.      */
  178.     public function withUri(\Psr\Http\Message\UriInterface $uri$preserveHost \false)
  179.     {
  180.         $clone = clone $this;
  181.         $clone->uri $uri;
  182.         if (!$preserveHost && $uri->getHost() !== '') {
  183.             $clone->headers->setHeader('Host'$uri->getHost());
  184.             return $clone;
  185.         }
  186.         if ($uri->getHost() !== '' && !$this->hasHeader('Host') || $this->getHeaderLine('Host') === '') {
  187.             $clone->headers->setHeader('Host'$uri->getHost());
  188.             return $clone;
  189.         }
  190.         return $clone;
  191.     }
  192.     /**
  193.      * {@inheritdoc}
  194.      */
  195.     public function getCookieParams() : array
  196.     {
  197.         return $this->cookies;
  198.     }
  199.     /**
  200.      * {@inheritdoc}
  201.      */
  202.     public function withCookieParams(array $cookies)
  203.     {
  204.         $clone = clone $this;
  205.         $clone->cookies $cookies;
  206.         return $clone;
  207.     }
  208.     /**
  209.      * {@inheritdoc}
  210.      */
  211.     public function getQueryParams() : array
  212.     {
  213.         if (\is_array($this->queryParams)) {
  214.             return $this->queryParams;
  215.         }
  216.         if ($this->uri === null) {
  217.             return [];
  218.         }
  219.         \parse_str($this->uri->getQuery(), $this->queryParams);
  220.         // <-- URL decodes data
  221.         \assert(\is_array($this->queryParams));
  222.         return $this->queryParams;
  223.     }
  224.     /**
  225.      * {@inheritdoc}
  226.      */
  227.     public function withQueryParams(array $query)
  228.     {
  229.         $clone = clone $this;
  230.         $clone->queryParams $query;
  231.         return $clone;
  232.     }
  233.     /**
  234.      * {@inheritdoc}
  235.      */
  236.     public function getUploadedFiles() : array
  237.     {
  238.         return $this->uploadedFiles;
  239.     }
  240.     /**
  241.      * {@inheritdoc}
  242.      */
  243.     public function withUploadedFiles(array $uploadedFiles)
  244.     {
  245.         $clone = clone $this;
  246.         $clone->uploadedFiles $uploadedFiles;
  247.         return $clone;
  248.     }
  249.     /**
  250.      * {@inheritdoc}
  251.      */
  252.     public function getServerParams() : array
  253.     {
  254.         return $this->serverParams;
  255.     }
  256.     /**
  257.      * {@inheritdoc}
  258.      */
  259.     public function getAttributes() : array
  260.     {
  261.         return $this->attributes;
  262.     }
  263.     /**
  264.      * {@inheritdoc}
  265.      */
  266.     public function getAttribute($name$default null)
  267.     {
  268.         return isset($this->attributes[$name]) ? $this->attributes[$name] : $default;
  269.     }
  270.     /**
  271.      * {@inheritdoc}
  272.      */
  273.     public function withAttribute($name$value)
  274.     {
  275.         $clone = clone $this;
  276.         $clone->attributes[$name] = $value;
  277.         return $clone;
  278.     }
  279.     /**
  280.      * {@inheritdoc}
  281.      */
  282.     public function withoutAttribute($name)
  283.     {
  284.         $clone = clone $this;
  285.         unset($clone->attributes[$name]);
  286.         return $clone;
  287.     }
  288.     /**
  289.      * {@inheritdoc}
  290.      */
  291.     public function getParsedBody()
  292.     {
  293.         return $this->parsedBody;
  294.     }
  295.     /**
  296.      * {@inheritdoc}
  297.      */
  298.     public function withParsedBody($data)
  299.     {
  300.         /** @var mixed $data */
  301.         if (!\is_null($data) && !\is_object($data) && !\is_array($data)) {
  302.             throw new \InvalidArgumentException('Parsed body value must be an array, an object, or null');
  303.         }
  304.         $clone = clone $this;
  305.         $clone->parsedBody $data;
  306.         return $clone;
  307.     }
  308. }