Вашим маршрутам Slone и промежуточному программному обеспечению предоставляется объект ответа PSR 7, который представляет текущий HTTP-ответ, который должен быть возвращен клиенту. Объект ответа реализует PSR 7 ResponseInterface, с помощью которого вы можете проверять и обрабатывать статус ответа HTTP, заголовки и тело.
Объект ответа PSR 7 вводится в ваши маршруты Slim-приложений в качестве второго аргумента для обратного вызова маршрута следующим образом:
<?php
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;
$app = new \Slim\App;
$app->get('/foo', function (ServerRequestInterface $request, ResponseInterface $response) {
// Use the PSR 7 $response object
return $response;
});
$app->run();Объект ответа PSR 7 вводится в ваше middleware Slim-приложения в качестве второго аргумента middleware, вызываемого следующим образом:
<?php
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;
$app = new \Slim\App;
$app->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) {
echo $name . ": " . implode(", ", $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 .
if ($response->hasHeader('Vary')) {
// Do something
}Вы можете установить значение заголовка с помощью withHeader($name, $value) метода объекта PSR 7 Response.
$newResponse = $oldResponse->withHeader('Content-type', 'application/json');Вы можете добавить значение заголовка с помощью withAddedHeader($name, $value) метода объекта PSR 7 Response
$newResponse = $oldResponse->withAddedHeader('Allow', 'PUT');withHeader() метода, этот метод добавляет новое значение к набору
значений, которые уже существуют для одного и того же заголовка. Объект Response
неизменен. Этот метод возвращает копию объекта Response с добавленным значением заголовка.
Вы можете удалить заголовок с помощью withoutHeader($name) метода объекта Response.
$newResponse = $oldResponse->withoutHeader('Allow');Ответ HTTP обычно имеет тело. Slim предоставляет объект PSR 7 Response, с помощью которого вы можете проверять и обрабатывать тело ответа в конечном итоге.
Так же, как объект запроса PSR 7, объект ответа PSR 7 реализует тело как экземпляр
\Psr\Http\Message\StreamInterface. Вы можете получить StreamInterface экземпляр
тела ответа HTTP с помощью getBody() метода объекта PSR 7 Response. getBody()
Способ является предпочтительным , если исходящей длина ответа HTTP , неизвестна
или слишком большая для доступной памяти.
$body = $response->getBody();Получаемый \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);У объекта 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.
withJson() вызове.
Объект ответа Slim имеет настраиваемый метод, withRedirect($url, $status = null)
когда вы хотите вернуть перенаправление на другой URL. Вы указываете, $url куда
вы хотите, чтобы клиент был перенаправлен вместе с дополнительным $status кодом.
return $response->withRedirect('/new-url', 301);