Ответ — Response
Вашим маршрутам Slone и промежуточному программному обеспечению предоставляется объект ответа PSR 7, который представляет текущий HTTP-ответ, который должен быть возвращен клиенту. Объект ответа реализует PSR 7 ResponseInterface, с помощью которого вы можете проверять и обрабатывать статус ответа HTTP, заголовки и тело.
Как получить объект Response
Объект ответа PSR 7 вводится в ваши маршруты Slim-приложений в качестве второго аргумента для обратного вызова маршрута следующим образом:
get('/foo', function (ServerRequestInterface $request, ResponseInterface $response) < // Use the PSR 7 $response object return $response; >); $app->run();
Объект ответа PSR 7 вводится в ваше middleware Slim-приложения в качестве второго аргумента middleware, вызываемого следующим образом:
add(function (ServerRequestInterface $request, ResponseInterface $response, callable $next) < // Use the PSR 7 $response object return $next($request, $response); >); // Define app routes. $app->run();
Статус ответа
Каждый ответ HTTP имеет числовой status code. Код состояния определяет тип ответа HTTP, который должен быть возвращен клиенту. Код состояния объекта PSR 7 по умолчанию 200(OK) . Вы можете получить код состояния объекта PSR 7 с помощью getStatusCode() метода, подобного этому.
$status = $response->getStatusCode();
Вы можете скопировать объект ответа PSR 7 и присвоить новый код состояния следующим образом:
$newResponse = $response->withStatus(302);
Заголовки ответов
У каждого HTTP-ответа есть заголовки. Это метаданные, которые описывают HTTP-ответ, но не отображаются в теле ответа. Объект Slim’s PSR 7 Response предоставляет несколько методов для проверки и управления его заголовками.
Получить все заголовки
Вы можете получить все заголовки HTTP-ответа в качестве ассоциативного массива с помощью getHeaders() метода объекта PSR 7 Response . Результирующие ключи ассоциативного массива — это имена заголовков, и его значения сами представляют собой числовой массив строковых значений для их соответствующего заголовка.
$headers = $response->getHeaders(); foreach ($headers as $name => $values)
Получить один заголовок
Вы можете получить значения (ов) одного заголовка с помощью getHeader($name) метода объекта PSR 7 Response. Это возвращает массив значений для данного заголовка. Помните, что один HTTP-заголовок может иметь более одного значения!
$headerValueArray = $response->getHeader('Vary');
Вы также можете получить строку с разделителями-запятыми со всеми значениями для данного заголовка с помощью getHeaderLine($name) метода объекта PSR 7 Response . В отличие от getHeader($name) метода, этот метод возвращает строку, разделенную запятыми.
$headerValueString = $response->getHeaderLine('Vary');
Обнаружение заголовка
Вы можете проверить наличие заголовка с помощью hasHeader($name) метода объекта PSR 7 Response .
Установить заголовок
Вы можете установить значение заголовка с помощью withHeader($name, $value) метода объекта PSR 7 Response.
$newResponse = $oldResponse->withHeader('Content-type', 'application/json');
Объект Response неизменен. Этот метод возвращает копию объекта Response с новым значением заголовка. Этот метод является разрушительным и заменяет существующие значения заголовков, уже связанные с тем же заголовком.
Добавить заголовок
Вы можете добавить значение заголовка с помощью withAddedHeader($name, $value) метода объекта PSR 7 Response
$newResponse = $oldResponse->withAddedHeader('Allow', 'PUT');
В отличие от withHeader() метода, этот метод добавляет новое значение к набору значений, которые уже существуют для одного и того же заголовка. Объект Response неизменен. Этот метод возвращает копию объекта Response с добавленным значением заголовка.
Удалить заголовок
Вы можете удалить заголовок с помощью withoutHeader($name) метода объекта Response.
$newResponse = $oldResponse->withoutHeader('Allow');
Объект Response неизменен. Этот метод возвращает копию объекта Response с добавленным значением заголовка.
Тело ответа
Ответ HTTP обычно имеет тело. Slim предоставляет объект PSR 7 Response, с помощью которого вы можете проверять и обрабатывать тело ответа в конечном итоге.
Так же, как объект запроса PSR 7, объект ответа PSR 7 реализует тело как экземпляр \Psr\Http\Message\StreamInterface . Вы можете получить StreamInterface экземпляр тела ответа HTTP с помощью getBody() метода объекта PSR 7 Response. getBody() Способ является предпочтительным , если исходящей длина ответа HTTP , неизвестна или слишком большая для доступной памяти.
Получаемый \Psr\Http\Message\StreamInterface экземпляр предоставляет следующие методы для чтения, итерации и записи в базовый PHP resource .
- getSize()
- tell()
- eof()
- isSeekable()
- seek()
- rewind()
- isWritable()
- write($string)
- isReadable()
- read($length)
- getContents()
- getMetadata($key = null)
Чаще всего вам нужно будет записать объект PSR 7 Response. Вы можете записать содержимое в StreamInterface экземпляр с помощью его write() метода следующим образом:
$body = $response->getBody(); $body->write('Hello');
Вы также можете заменить тело объекта PSR 7 Response совершенно новым StreamInterface экземпляром. Это особенно полезно, когда вы хотите передать контент из удаленного адресата (например, файловой системы или удаленного API) в ответ HTTP. Вы можете заменить тело объекта PSR 7 Response своим withBody(StreamInterface $body) методом. Его аргумент ДОЛЖЕН быть примером \Psr\Http\Message\StreamInterface .
$newStream = new \GuzzleHttp\Psr7\LazyOpenStream('/path/to/file', 'r'); $newResponse = $oldResponse->withBody($newStream);
Объект Response неизменен. Этот метод возвращает копию объекта Response, который содержит новый элемент.
Возвращение JSON
У объекта Slim Response есть собственный метод, withJson($data, $status, $encodingOptions) помогающий упростить процесс возвращения данных JSON.
Параметр $data содержит структуру данных, которые вы хотите возвратить как JSON. $status является необязательным и может использоваться для возврата пользовательского HTTP-кода. $encodingOptions является необязательным, и для него используются одни и те же параметры кодирования json_encode() .
В простейшей форме данные JSON могут быть возвращены с кодом состояния HTTP по умолчанию 200.
$data = array('name' => 'Bob', 'age' => 40); $newResponse = $oldResponse->withJson($data);
Мы также можем вернуть данные JSON с пользовательским кодом состояния HTTP.
$data = array('name' => 'Rob', 'age' => 40); $newResponse = $oldResponse->withJson($data, 201);
Content-Type В ответ автоматически устанавливается application/json;charset=utf-8 .
Если есть проблема с кодировкой данных в JSON, a \RuntimeException($message, $code) выбрано значение, содержащее значения json_last_error_msg() как $message и json_last_error() как $code .
Объект Response неизменен. Этот метод возвращает копию объекта Response с новым заголовком Content-Type. Этот метод является разрушительным, и он заменяет существующий заголовок Content-Type. Статус также заменяется, если статус $ был передан при withJson() вызове.
Возврат перенаправления
Объект ответа Slim имеет настраиваемый метод, withRedirect($url, $status = null) когда вы хотите вернуть перенаправление на другой URL. Вы указываете, $url куда вы хотите, чтобы клиент был перенаправлен вместе с дополнительным $status кодом.
return $response->withRedirect('/new-url', 301);