# Класс HttpSoft\Message\ServerRequest

Класс, реализующий Psr\Http\Message\ServerRequestInterface.

Объект HttpSoft\Message\ServerRequest является неизменяемым. Вы можете использовать сеттеры (с префиксом with и without), которые возвращают новый экземпляр класса с измененными данными.

Исходный код на GitHub.

use HttpSoft\Message\ServerRequest;

$request = new ServerRequest(
    $_SERVER,
    $_FILES,
    $_COOKIE,
    $_GET,
    $_POST,
    'GET', // Метод запроса
    'http://example.com', // URI запроса
    ['Host' => 'example.com', /* Другие заголовки */],
    'php://temp', // Тело HTTP-сообщения
    '1.1' // Версия HTTP-протокола
);

// Используя сеттеры
$request
    ->withUploadedFiles([/* Данные файлов */])
    ->withCookieParams([/* Cookie-данные */])
    ->withQueryParams([/* Get-данные */])
    ->withParsedBody([/* Post-данные */])
    ->withAttribute('page', '3' /* Любые пользовательские данные */);

# Публичные методы

Оригинальное подробное описание методов смотрите в Psr\Http\Message\ServerRequestInterface.

/**
 * @param array $serverParams
 * @param array $uploadedFiles
 * @param array $cookieParams
 * @param array $queryParams
 * @param array|object|null $parsedBody
 * @param string $method
 * @param UriInterface|string $uri
 * @param array $headers
 * @param StreamInterface|string|resource $body
 * @param string $protocol
 */
public function __construct(
    array $serverParams = [],
    array $uploadedFiles = [],
    array $cookieParams = [],
    array $queryParams = [],
    $parsedBody = null,
    string $method = 'GET',
    $uri = '',
    array $headers = [],
    $body = 'php://temp',
    string $protocol = '1.1'
);

Ниже представлены методы, которые определены в интерфейсе Psr\Http\Message\ServerRequestInterface. Все остальные методы с описанием находятся в подключаемых трейтах (HttpSoft\Message\RequestTrait и HttpSoft\Message\MessageTrait).

# getServerParams

Возвращает параметры сервера.

public function getServerParams(): array;

Возвращает cookies.

public function getCookieParams(): array;

Возвращает новый экземпляр с указанными cookies.

public function withCookieParams(array $cookies): ServerRequestInterface;

Массив $cookies должен быть совместим со структурой $_COOKIE.

$request->getCookieParams(); // []

$newRequest = $request->withCookieParams(['cookie_name' => 'cookie-value']);
$newRequest->getCookieParams(); // ['cookie_name' => 'cookie-value']

$request->getCookieParams(); // []

# getQueryParams

Возвращает аргументы строки запроса.

public function getQueryParams(): array;

# withQueryParams

Возвращает новый экземпляр с указанными аргументами строки запроса.

public function withQueryParams(array $query): ServerRequestInterface;

Массив $query должен быть совместим со структурой $_GET.

$request->getQueryParams(); // []

$newRequest = $request->withQueryParams(['query_string_key' => 'query-string-value']);
$newRequest->getQueryParams(); // ['query_string_key' => 'query-string-value']

$request->getQueryParams(); // []

# getUploadedFiles

Возвращает нормализованные данные загружаемых файлов.

public function getUploadedFiles(): array;

Этот метод возвращает метаданные загружаемых файлов в нормализованном дереве, причем каждый элемент является экземпляром Psr\Http\Message\UploadedFileInterface.

# withUploadedFiles

Возвращает новый экземпляр с указанными загружаемыми файлами.

public function withUploadedFiles(array $uploadedFiles): ServerRequestInterface;

Массив $uploadedFiles должен быть нормализованным деревом, причем каждый элемент является экземпляром Psr\Http\Message\UploadedFileInterface, иначе будет брошено исключение \InvalidArgumentException.

$request->getUploadedFiles(); // []

$newRequest = $request->withUploadedFiles([
    'file' => new UploadedFile('/tmp/phpN3FmFr', 1024, UPLOAD_ERR_OK, 'file.txt', 'text/plain'),
]);
$newRequest->getUploadedFiles()['file']->getClientFilename(); // 'file.txt'
$newRequest->getUploadedFiles()['file']->getClientMediaType(); // 'text/plain'
$newRequest->getUploadedFiles()['file']->getStream()->getMetadata('uri'); // '/tmp/phpN3FmFr'
$newRequest->getUploadedFiles()['file']->getError(); // 0 (UPLOAD_ERR_OK)
$newRequest->getUploadedFiles()['file']->getSize(); // 1024

$request->getUploadedFiles(); // []

// throws InvalidArgumentException
$request->withUploadedFiles([
    'file' => [
        'name' => 'file.txt',
        'type' => 'text/plain',
        'tmp_name' => '/tmp/phpN3FmFr',
        'error' => UPLOAD_ERR_OK,
        'size' => 1024,
    ],
]);

# getParsedBody

Возвращает параметры, указанные в теле запроса.

/**
 * @return null|array|object
 */
public function getParsedBody();

# withParsedBody

Возвращает новый экземпляр с указанными параметрами тела запроса.

/**
 * @param null|array|object $data
 * @return static
 */
public function withParsedBody($data): ServerRequestInterface;

Если тип содержимого запроса (Content-Type) - application/x-www-form-urlencoded или multipart/form-data, а метод запроса - POST, то значение $data должно быть содержимым $_POST. В противном случае могут быть возвращены любые результаты десериализации содержимого тела запроса, но только в виде массива, объекта или null, иначе будет брошено исключение \InvalidArgumentException.

$request->getParsedBody(); // []

$newRequest = $request->withParsedBody(['post_data_key' => 'post_data-value']);
$newRequest->getParsedBody(); // ['post_data_key' => 'post_data-value']

$request->getParsedBody(); // []

// throws InvalidArgumentException
$request->withParsedBody(json_encode(['post_data_key' => 'post_data-value']);

# getAttributes

Возвращает все атрибуты, полученные из запроса, если они были заданы.

public function getAttributes(): array;

«Атрибуты» запроса могут использоваться для обеспечения возможности прикрепления к запросу и получения из запроса любых параметров, например: результатов операций сопоставления путей; результатов расшифровки файлов cookie; результатов десериализации тел сообщений, не закодированных в форме; и т.д. Атрибуты будут специфичны для каждого приложения и запроса и могут быть изменяемыми.

# getAttribute

Возвращает один атрибут, полученный из запроса, или значение по умолчанию, если атрибут не был установлен.

/**
 * @see getAttributes()
 * @param string $name
 * @param mixed $default
 * @return mixed
 */
public function getAttribute($name, $default = null);

# withAttribute

Возвращает новый экземпляр с указанным атрибутом запроса.

/**
 * @see getAttributes()
 * @param string $name
 * @param mixed $value
 * @return static
 */
public function withAttribute($name, $value): ServerRequestInterface;

Этот метод позволяет задать один производный атрибут запроса, как описано в getAttributes().

$request->getAttributes(); // []
$request->getAttribute('page'); // null
$request->getAttribute('page', 0); // 0

$newRequest = $request->withAttribute('page', 3);
$newRequest->getAttributes(); // ['page' => 3]
$newRequest->getAttribute('page'); // 3

$request->getAttributes(); // []

# withoutAttribute

Возвращает новый экземпляр без указанного атрибута запроса.

/**
 * @see getAttributes()
 * @param string $name
 * @return static
 */
public function withoutAttribute($name): ServerRequestInterface;

Этот метод позволяет удалить один производный атрибут запроса, как описано в getAttributes().

$request->getAttributes(); // ['page' => 3]
$request->getAttribute('page'); // 3

$newRequest = $request->withoutAttribute('page');
$newRequest->getAttributes(); // []
$newRequest->getAttribute('page'); // null
$newRequest->getAttribute('page', 0); // 0

$request->getAttributes(); // ['page' => 3]