validateUploadedFiles($uploadedFiles); if ($body === 'php://input') { $body = new PhpInputStream(); } $this->initialize($uri, $method, $body, $headers); $this->serverParams = $serverParams; $this->uploadedFiles = $uploadedFiles; $this->cookieParams = $cookies; $this->queryParams = $queryParams; $this->parsedBody = $parsedBody; $this->protocol = $protocol; } /** * {@inheritdoc} */ public function getServerParams() : array { return $this->serverParams; } /** * {@inheritdoc} */ public function getUploadedFiles() : array { return $this->uploadedFiles; } /** * {@inheritdoc} */ public function withUploadedFiles(array $uploadedFiles) : ServerRequest { $this->validateUploadedFiles($uploadedFiles); $new = clone $this; $new->uploadedFiles = $uploadedFiles; return $new; } /** * {@inheritdoc} */ public function getCookieParams() : array { return $this->cookieParams; } /** * {@inheritdoc} */ public function withCookieParams(array $cookies) : ServerRequest { $new = clone $this; $new->cookieParams = $cookies; return $new; } /** * {@inheritdoc} */ public function getQueryParams() : array { return $this->queryParams; } /** * {@inheritdoc} */ public function withQueryParams(array $query) : ServerRequest { $new = clone $this; $new->queryParams = $query; return $new; } /** * {@inheritdoc} */ public function getParsedBody() { return $this->parsedBody; } /** * {@inheritdoc} */ public function withParsedBody($data) : ServerRequest { if (! is_array($data) && ! is_object($data) && null !== $data) { throw new Exception\InvalidArgumentException(sprintf( '%s expects a null, array, or object argument; received %s', __METHOD__, gettype($data) )); } $new = clone $this; $new->parsedBody = $data; return $new; } /** * {@inheritdoc} */ public function getAttributes() : array { return $this->attributes; } /** * {@inheritdoc} */ public function getAttribute($attribute, $default = null) { if (! array_key_exists($attribute, $this->attributes)) { return $default; } return $this->attributes[$attribute]; } /** * {@inheritdoc} */ public function withAttribute($attribute, $value) : ServerRequest { $new = clone $this; $new->attributes[$attribute] = $value; return $new; } /** * {@inheritdoc} */ public function withoutAttribute($attribute) : ServerRequest { $new = clone $this; unset($new->attributes[$attribute]); return $new; } /** * Recursively validate the structure in an uploaded files array. * * @throws Exception\InvalidArgumentException if any leaf is not an UploadedFileInterface instance. */ private function validateUploadedFiles(array $uploadedFiles) : void { foreach ($uploadedFiles as $file) { if (is_array($file)) { $this->validateUploadedFiles($file); continue; } if (! $file instanceof UploadedFileInterface) { throw new Exception\InvalidArgumentException('Invalid leaf in uploaded files structure'); } } } }