04 - PSR-7 HTTP Ответ
Обзор
Phalcon\Http\Message\Response является реализацией интерфейса обмена сообщениям HTTP PSR-7 , как определено в PHP-FIG.
Phalcon\Http\Message\Response представляет собой исходящий ответ на стороне сервера. Согласно спецификации HTTP, этот интерфейс включает свойства для каждого из следующего:
- Версия протокола
- Код состояния и фраза причины
- Заголовки
- Тело сообщения
ПРИМЕЧАНИЕ: В приведенных ниже примерах
$httpClient
- это клиент по вашему выбору, который реализует PSR-7.
<?php use Phalcon\Http\Message\Response; use Phalcon\Http\Message\Stream; $response = new Response(); $payload = [ 'code' => 2000, 'status' => 'success', 'payload' => [ 'id' => 12345, 'name' => 'John Doe', ] ]; $stream = new Stream('php://memory', 'wb'); $stream->write(json_encode($payload)); $response = $response ->withHeader('Content-Type', 'application/json') ->withBody($stream) ->withStatus(200) ; $result = $httpClient->send($response); $payload = 'The above copyright notice and this permission ' . 'notice shall be included in all copies or ' . 'substantial portions of the Software.' ; $response = $response ->withHeader('Content-Type', 'text/html') ->withBody($payload) ->withStatus(200) ; $result = $httpClient->send($response);
Мы создаем новый объект Phalcon\Http\Message\Response с полезной нагрузкой, представленной в виде JSON, необходимыми заголовками и кодом состояния. Затем клиент отправляет ответ обратно, используя объект запроса.
Приведенный выше пример может быть реализован только с использованием параметров конструктора:
<?php use Phalcon\Http\Message\Response; $payload = [ 'code' => 2000, 'status' => 'success', 'payload' => [ 'id' => 12345, 'name' => 'John Doe', ] ]; $request = new Response( json_encode($payload), 200, [ 'Content-Type' => 'application/json', ] ); $result = $httpClient->send($request);
Созданный объект Phalcon\Http\Message\Response является неизменным, то есть он никогда не изменится. Любой вызов методов с префиксом with*
вернет клон объекта для сохранения неизменности в соответствии со стандартом.
Конструктор
public function __construct( [mixed $body = "php://temp" [, int $code = 200 [, array $headers = [] ]]] )
Конструктор принимает параметры, позволяющие создать объект с определенными заполненными свойствами. Вы можете определить тело, код состояния, а также заголовки. Все параметры являются необязательными.
body
- по умолчаниюphp://memory
. Метод принимает либо объект, который реализует интерфейсStreamInterface
, либо строку, такую как имя потока. Режим по умолчанию для потока -w+b
. Если пропущен недопустимый поток, генерируется исключение InvalidArgumentExceptioncode
- Целое число, представляющее код состояния для ответа. По умолчанию это200
.headers
- Массив значений ключа, с ключом в качестве имени заголовка и значением в качестве значения заголовка.
Геттеры
getBody()
Возвращает тело как объект StreamInterface
. Этот метод полезен также, когда необходимо быстро настроить тело сообщения. Вы можете проверить методы, которые вы можете вызвать, проверив класс Phalcon\Http\Message\Stream.
<?php use Phalcon\Http\Message\Response; use Phalcon\Http\Message\Stream; $fileName = dataFolder('/assets/stream/mit.txt'); $stream = new Stream($fileName, 'rb'); $response = new Response($stream); echo $response->getBody(); // '/assets/stream/mit.txt' $response->getBody()->write('additional content goes here');
Чтобы получить все содержимое потока:
<?php use Phalcon\Http\Message\Response; use Phalcon\Http\Message\Stream; $fileName = dataFolder('/assets/stream/mit.txt'); $stream = new Stream($fileName, 'rb'); $response = new Response($stream); $body = $response->getBody(); $body->rewind() $text = $body->getContents();
getHeader()
Возвращает массив всех значений заголовка переданного без учета регистра имени заголовка. Если строковый параметр, представляющий запрашиваемое имя заголовка, отсутствует, возвращается пустой массив.
<?php use Phalcon\Http\Message\Response; use Phalcon\Http\Message\Stream; $fileName = dataFolder('/assets/stream/mit.txt'); $stream = new Stream($fileName, 'rb'); $response = new Response( $stream, 200, [ 'Content-Type' => 'application/json', ] ); echo $response->getHeader('content-Type'); // ['application/json'] echo $response->getHeader('unknown'); // []
getHeaderLine()
Возвращает все значения заголовка данного имени заголовка без учета регистра в виде строки, объединенной вместе с помощью запятой. Если строковый параметр, представляющий запрашиваемое имя заголовка, возвращается пустая строка.
<?php use Phalcon\Http\Message\Response; use Phalcon\Http\Message\Stream; $fileName = dataFolder('/assets/stream/mit.txt'); $stream = new Stream($fileName, 'rb'); $response = new Response( $stream, 200, [ 'Content-Type' => [ 'application/json', 'application/html', ], ] ); echo $response->getHeaderLine('content-Type'); // 'application/json,application/html'
getHeaders()
Возвращает массив со всеми значениями заголовка сообщения. Ключи представляют имя заголовка, так как оно будет отправлено по проводам, а каждое значение представляет собой массив строк, связанных с заголовком. Хотя имена заголовков не чувствительны к регистру, этот метод сохраняет точный регистр, в котором заголовки были изначально указаны.
<?php use Phalcon\Http\Message\Response; use Phalcon\Http\Message\Stream; $fileName = dataFolder('/assets/stream/mit.txt'); $stream = new Stream($fileName, 'rb'); $response = new Response( $stream, 200, [ 'Content-Type' => [ 'application/json', 'application/html', ], ] ); var_dump( $response->getHeaders() ); // [ // 'Content-Type' => [ // 'application/json', // 'application/html', // ], // ]
getProtocolVersion()
Возвращает версию протокола в виде строки (по умолчанию 1.1
)
<?php use Phalcon\Http\Message\Response; use Phalcon\Http\Message\Stream; $fileName = dataFolder('/assets/stream/mit.txt'); $stream = new Stream($fileName, 'rb'); $response = new Response( $stream, 200, [ 'Content-Type' => 'application/json', ] ); echo $response->getProtocolVersion(); // '1.1'
getReasonPhrase()
Возвращает фразу причины ответа, связанную с кодом состояния. Поскольку фраза причины не является обязательным элементом в строке состояния ответа, значение фразы причины может быть пустым. Строка возврата поступает из реестра кодов состояния IANA HTTP, как определено в RFC 7231.
<?php use Phalcon\Http\Message\Response; use Phalcon\Http\Message\Stream; $fileName = dataFolder('/assets/stream/mit.txt'); $stream = new Stream($fileName, 'rb'); $response = new Response( $stream, 203, [ 'Content-Type' => 'application/json', ] ); echo $response->getReasonPhrase(); // 'Non-Authoritative Information'
getStatusCode()
Возвращает код состояния ответа. Код состояния представляет собой трехзначный целочисленный код результата попытки сервера понять и удовлетворить запрос.
<?php use Phalcon\Http\Message\Response; use Phalcon\Http\Message\Stream; $fileName = dataFolder('/assets/stream/mit.txt'); $stream = new Stream($fileName, 'rb'); $response = new Response( $stream, 203, [ 'Content-Type' => 'application/json', ] ); echo $response->getStatusCode(); // 203
getUri()
Возвращает Uri как объект UriInterface
<?php use Phalcon\Http\Message\Response; use Phalcon\Http\Message\Stream; $fileName = dataFolder('/assets/stream/mit.txt'); $stream = new Stream($fileName, 'rb'); $response = new Response( $stream, 200, [ 'Content-Type' => 'application/json', ] ); $response = $response->withUri('https://api.phalcon.io/companies/1'); echo $response->getUri(); // UriInterface : https://api.phalcon.io/companies/1
Существование
hasHeader()
Проверяет, существует ли заголовок с заданным нечувствительным к регистру именем. Возвращает true
, если заголовок был найден, false
в противном случае
<?php use Phalcon\Http\Message\Response; use Phalcon\Http\Message\Stream; $fileName = dataFolder('/assets/stream/mit.txt'); $stream = new Stream($fileName, 'rb'); $response = new Response( $stream, 200, [ 'Content-Type' => [ 'application/json', 'application/html', ], ] ); echo $response->hasHeader('content-type'); // true
С
Объект запроса является неизменяемым. Однако существует ряд методов, позволяющих вводить в него данные. Возвращаемый объект является клоном исходного объекта.
withAddedHeader()
Возвращает экземпляр с дополнительным заголовком, добавленным к заданному значению. Существующие значения для указанного заголовка будут сохранены. Новое значение(ы) будет добавлено к существующему списку. Если заголовок ранее не существовал, он будет добавлен. Создает исключение InvalidArgumentException для недопустимых имен заголовков или значений. Значения заголовка могут быть строкой или массивом строк.
<?php use Phalcon\Http\Message\Response; use Phalcon\Http\Message\Stream; $fileName = dataFolder('/assets/stream/mit.txt'); $stream = new Stream($fileName, 'rb'); $jwtToken = 'abc.def.ghi'; $response = new Response( $stream, 200, [ 'Authorization' => 'Bearer ' . $jwtToken, 'Content-Type' => [ 'application/json', ], ] ); var_dump( $response->getHeaders() ); // [ // 'Authorization' => 'Bearer abc.def.ghi', // 'Content-Type' => [ // 'application/json', // ], // ] $clone = $response->withAddedHeader('Content-Type', ['application/html']); var_dump( $clone->getHeaders() ); // [ // 'Authorization' => 'Bearer abc.def.ghi', // 'Content-Type' => [ // 'application/json', // 'application/html', // ], // ]
withBody()
Возвращает экземпляр с указанным телом сообщения, который реализует StreamInterface
. Создает исключение InvalidArgumentException, когда тело недопустимо.
<?php use Phalcon\Http\Message\Response; use Phalcon\Http\Message\Stream; $fileName = dataFolder('/assets/stream/mit.txt'); $stream = new Stream($fileName, 'rb'); $jwtToken = 'abc.def.ghi'; $response = new Response( null, 200, [ 'Authorization' => 'Bearer ' . $jwtToken, 'Content-Type' => 'application/json', ] ); $clone = $response->withBody($stream); echo $clone->getBody(); // '/assets/stream/mit.txt'
withHeader()
Возвращает экземпляр с предоставленным значением, заменяющим указанный заголовок. В то время как имена заголовков не чувствительны к регистру, оболочка заголовка будет сохранена этой функцией и возвращена из getHeaders()
. Создает исключение InvalidArgumentException для недопустимых имен заголовков или значений.
<?php use Phalcon\Http\Message\Response; $jwtToken = 'abc.def.ghi'; $response = new Response( null, 200, [ 'Authorization' => 'Bearer ' . $jwtToken, ] ); var_dump( $response->getHeaders() ); // [ // 'Authorization' => 'Bearer abc.def.ghi', // ] $clone = $response->withAddedHeader( 'Content-Type', [ 'application/html', ] ); var_dump( $clone->getHeaders() ); // [ // 'Authorization' => 'Bearer abc.def.ghi', // 'Content-Type' => [ // 'application/html', // ], // ]
withProtocolVersion()
Возвращает экземпляр с указанной версией протокола HTTP (в виде строки).
<?php use Phalcon\Http\Message\Response; $response = new Request(); echo $response->getProtocolVersion(); // '1.1' $clone = $response->withProtocolVersion('2.0'); echo $clone->getProtocolVersion(); // '2.0'
withStatus()
Возвращает экземпляр с указанным кодом состояния и, при необходимости, фразой причины. Если причина не определена, строка причины будет получена из реестра кодов состояния HTTP IANA, как определено в RFC 7231.
<?php use Phalcon\Http\Message\Response; $response = new Request(); echo $response->getStatusCode(); // 200 echo $response->getReasonPhrase(); // OK $clone = $response->withStatus(203, 'Something Else'); echo $response->getStatusCode(); // 203 echo $response->getReasonPhrase(); // 'Something Else'
withUri()
Возвращает экземпляр с предоставленным URI UriInterface
. Этот метод обновляет заголовок Host
возвращенного запроса по умолчанию, если URI содержит компонент host. Если URI не содержит компонент хоста, любой ранее существующий заголовок хоста будет перенесен в возвращенный запрос.
Вы можете отказаться от сохранения исходного состояния заголовка Host, установив для $preserveHost
значение true
. Когда $preserveHost
имеет значение true
, этот метод взаимодействует с заголовком Host следующими способами:
- Если заголовок Host отсутствует или пуст, а новый URI содержит компонент host, этот метод обновит заголовок
Host
в возвращенном запросе. - Если заголовок Host отсутствует или пуст, а новый URI не содержит компонент хоста, этот метод не будет обновлять заголовок
Host
в возвращенном запросе. - Если заголовок Host присутствует и не пуст, этот метод не будет обновлять заголовок
Host
в возвращенном запросе.
<?php use Phalcon\Http\Message\Response; $query = 'https://phalcon.io'; $uri = new Uri($query); $request = new Response(); $clone = $request->withUri($uri); echo $clone->getUri(); // UriInterface: 'https://phalcon.io'
withoutHeader()
Вернуть экземпляр без указанного заголовка.
<?php use Phalcon\Http\Message\Response; $jwtToken = 'abc.def.ghi'; $response = new Response( null, 200, [ 'Authorization' => 'Bearer ' . $jwtToken, 'Content-Type' => [ 'application/json', ], ] ); var_dump( $response->getHeaders() ); // [ // 'Authorization' => 'Bearer abc.def.ghi', // 'Content-Type' => [ // 'application/json', // ], // ] $clone = $response->withoutHeader('Content-Type'); var_dump( $clone->getHeaders() ); // [ // 'Authorization' => 'Bearer abc.def.ghi', // ]