vendor/nyholm/psr7/src/ServerRequest.php line 16

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Nyholm\Psr7;
  4. use Psr\Http\Message\{ServerRequestInterfaceStreamInterfaceUploadedFileInterfaceUriInterface};
  5. /**
  6.  * @author Michael Dowling and contributors to guzzlehttp/psr7
  7.  * @author Tobias Nyholm <tobias.nyholm@gmail.com>
  8.  * @author Martijn van der Ven <martijn@vanderven.se>
  9.  *
  10.  * @final This class should never be extended. See https://github.com/Nyholm/psr7/blob/master/doc/final.md
  11.  */
  12. class ServerRequest implements ServerRequestInterface
  13. {
  14.     use MessageTrait;
  15.     use RequestTrait;
  16.     /** @var array */
  17.     private $attributes = [];
  18.     /** @var array */
  19.     private $cookieParams = [];
  20.     /** @var array|object|null */
  21.     private $parsedBody;
  22.     /** @var array */
  23.     private $queryParams = [];
  24.     /** @var array */
  25.     private $serverParams;
  26.     /** @var UploadedFileInterface[] */
  27.     private $uploadedFiles = [];
  28.     /**
  29.      * @param string $method HTTP method
  30.      * @param string|UriInterface $uri URI
  31.      * @param array $headers Request headers
  32.      * @param string|resource|StreamInterface|null $body Request body
  33.      * @param string $version Protocol version
  34.      * @param array $serverParams Typically the $_SERVER superglobal
  35.      */
  36.     public function __construct(string $method$uri, array $headers = [], $body nullstring $version '1.1', array $serverParams = [])
  37.     {
  38.         $this->serverParams $serverParams;
  39.         if (!($uri instanceof UriInterface)) {
  40.             $uri = new Uri($uri);
  41.         }
  42.         $this->method $method;
  43.         $this->uri $uri;
  44.         $this->setHeaders($headers);
  45.         $this->protocol $version;
  46.         if (!$this->hasHeader('Host')) {
  47.             $this->updateHostFromUri();
  48.         }
  49.         // If we got no body, defer initialization of the stream until ServerRequest::getBody()
  50.         if ('' !== $body && null !== $body) {
  51.             $this->stream Stream::create($body);
  52.         }
  53.     }
  54.     public function getServerParams(): array
  55.     {
  56.         return $this->serverParams;
  57.     }
  58.     public function getUploadedFiles(): array
  59.     {
  60.         return $this->uploadedFiles;
  61.     }
  62.     public function withUploadedFiles(array $uploadedFiles)
  63.     {
  64.         $new = clone $this;
  65.         $new->uploadedFiles $uploadedFiles;
  66.         return $new;
  67.     }
  68.     public function getCookieParams(): array
  69.     {
  70.         return $this->cookieParams;
  71.     }
  72.     public function withCookieParams(array $cookies)
  73.     {
  74.         $new = clone $this;
  75.         $new->cookieParams $cookies;
  76.         return $new;
  77.     }
  78.     public function getQueryParams(): array
  79.     {
  80.         return $this->queryParams;
  81.     }
  82.     public function withQueryParams(array $query)
  83.     {
  84.         $new = clone $this;
  85.         $new->queryParams $query;
  86.         return $new;
  87.     }
  88.     public function getParsedBody()
  89.     {
  90.         return $this->parsedBody;
  91.     }
  92.     public function withParsedBody($data)
  93.     {
  94.         if (!\is_array($data) && !\is_object($data) && null !== $data) {
  95.             throw new \InvalidArgumentException('First parameter to withParsedBody MUST be object, array or null');
  96.         }
  97.         $new = clone $this;
  98.         $new->parsedBody $data;
  99.         return $new;
  100.     }
  101.     public function getAttributes(): array
  102.     {
  103.         return $this->attributes;
  104.     }
  105.     public function getAttribute($attribute$default null)
  106.     {
  107.         if (false === \array_key_exists($attribute$this->attributes)) {
  108.             return $default;
  109.         }
  110.         return $this->attributes[$attribute];
  111.     }
  112.     public function withAttribute($attribute$value): self
  113.     {
  114.         $new = clone $this;
  115.         $new->attributes[$attribute] = $value;
  116.         return $new;
  117.     }
  118.     public function withoutAttribute($attribute): self
  119.     {
  120.         if (false === \array_key_exists($attribute$this->attributes)) {
  121.             return $this;
  122.         }
  123.         $new = clone $this;
  124.         unset($new->attributes[$attribute]);
  125.         return $new;
  126.     }
  127. }