Write response in php

Ответ — 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);

Источник

Читайте также:  Sort php в обратном порядке
Оцените статью