Сервис Response фреймворка содержит глобальные данные для формирования ответа клиенту.
При асинхронном использовании фреймворка эти данные откатываются к значениям по умолчанию после окончания каждого запроса.
Способы присвоения данных для Response в контроллерах:
Способ аналогичен для всех классов, унаследованных от Hleb\Base\Container, но формирование ответа напрямую в Response вне контроллера будет плохой практикой.
Пример использования Response в коде приложения (код также будет трудно поддерживать в этом случае):
Также доступ к сервису Response может быть получен через внедрение зависимостей по интерфейсу Hleb\Reference\Interface\Response.
Для упрощения примеров, далее они будут содержать только обращение через DI.
В сочетании с выводом print и echo, данные из Response будут выведены позже, правильной стратегией будет использование только одного способа для вывода результатов.
При окончании запроса фреймворк в любом случае обратится к указанному объекту Response для вывода ответа, даже если этот объект не был возвращён из контроллера. Это может быть удобно при разовом или последовательном добавлении данных в Response в рамках одного метода контроллера. При необходимости манипулирования объектами ответа, содержащими различные данные, можно использовать любой другой Response по PSR-7. Альтернативный Response необходимо будет вернуть в вызванном методе контроллера.
Тело ответа - это добавленные в объект Response данные, которые можно преобразовать в строку. Обычно это текст сообщения, отображаемый пользователю или данные в формате JSON или XML, возможно генерируемый на лету HTML и т.д.
Для добавления данных предназначены следующие методы сервиса Response:
set() или setBody() — присвоение данных, полностью перезаписывающих предыдущее тело ответа при его наличии.
add() или addToBody() — добавление в конец к предыдущим добавленным данным.
Для получения данных из сервиса:
get() или getBody() — получение текущего состояния тела запроса в объекте Response.
Перед отправкой данных клиенту необходимо убедиться, что они проверены на XSS-уязвимости. Если данные не обрабатывались таким образом ранее, то их можно пропустить через PHP-функцию htmlspecialchars().
По умолчанию статус установлен как 200.
Если ответ должен иметь иной статус, то можно воспользоваться методом setStatus(), первым аргументом которого сам статус, а вторым короткое сообщение статуса, если оно отличается от стандартного.
В статусе '404 Not Found' таким сообщением будет 'Not Found'.
Обычно используются стандартные сообщения статусов, так что установить статус по номеру можно сразу в методе set() вторым аргументом.
Получить текущий HTTP-статус из сервиса Response позволяет метод getStatus().
Кроме заголовков ответа, заданных глобально на стороне сервера, вы можете задать собственные, возвращаемые с конкретным ответом из фреймворка. Для заголовков второго типа и предназначены следующие методы сервиса Response.
Метод setHeader() устанавливает заголовок по названию, переопределяя предыдущее значение, если оно было установлено. В редком случае, когда необходимо создать несколько одинаковых заголовков, аргумент replace метода позволяет добавлять заголовок к текущему значению.
Метод hasHeader() проверяет наличие заголовка по названию.
Для получения массива данных заголовка по названию предназначен метод getHeader().
Данные всех установленных в Response заголовков возвращает метод getHeaders() в виде массива.
Операции над заголовками с помощью стандартных PHP-функций, хоть и будут работать вместе, но возможны конфликты с совместным использованием через объект Response. Лучше использовать только один подход во всём приложении.
Версия HTTP-протокола по умолчанию равна '1.1', если не определено из текущего запроса. Так как в большинстве случаев вернуться должно значение как в самом запросе, то изменение используется редко.
Тем не менее, методы getVersion() и setVersion() предназначены для соответствующего получения и присвоения значения.
← Request Кеширование →