Pull to refresh

Requests и Responses в CodeIgniter 4

Reading time3 min
Views5.4K
image
Лонни Эцелл (Lonnie Ezell), основной разработчик CodeIgniter 4, поделился в своем блоге информацией о новом функционале четвертой версии фреймворка.

Одним из самых больших изменений в CodeIgniter 4 является способ ввода и вывода обрабатываемых данных. В предыдущих версиях, в том числе последних версиях Codeigniter 3x, на входе и выходе для обработки данных были задействовано два класса, которые содержали в основном связанную функциональность — это класс Output и Input.

В CodeIgniter 4 HTTP слой смоделирован гораздо более тесно и построена новая иерархия классов для представления общих запросов и ответов HTTP.

IncomingRequest


Класс IncomingRequest обеспечивает доступ к запросам HTTP и всем данным на стороне, которые идут с ним, в том числе:
  • GET, POST, SERVER и ENV переменные
  • Заголовки
  • Печеньки (Куки)
  • Объекты URL
  • Загруженные файлы

И предоставляет удобные методы для таких вещей, как:

  • IP-адрес клиента
  • Был ли это AJAX-запрос?
  • Был ли это запрос CLI?
  • Происходит ли все через HTTPS?


Здесь уже другой класс запросов, который является более универсальным и не знает подробностей-запроса HTTP, который содержит такие вещи как GET и POST переменные. Запрос может быть одним из двух: входящий запрос, о том, что браузер клиента отправил на сервер, и исходящий, посылаемый на внешний сервер.

Response


Класс ответа, который используется для того, чтобы построить свой ответ клиенту. Здесь можно назначить заголовки, установить выход напрямую, и многое другое. Он предоставляет удобные методы для таких вещей, как:

  • Установку соответствующих не-кэша заголовков
  • Работа с заголовками кэширования HTTP
  • Перенаправление на новую страницу

Пример использования:

Контроллер уже имеет экземпляр классов в качестве свойств, но для простой работы, не нужно их никогда использовать. Любой выход из контроллера фиксируется и автоматически устанавливается в качестве тела ответа.

class Home extends \CodeIgniter\Controller
{
    public function index()
    {
        echo "Hello World!";
    }
}


Появится возможность создавать сложные стратегии кэширования HTTP, выстраивать работу с входящим запросом и многое другое.

class Home extends \CodeIgniter\Controller
{
    public function __construct(...$params)
    {
        parent::__construct(...$params);

        // Этот контроллер доступен только через HTTPS
        if (! $this->request->isSecure())
        {
            // // Переадресовать пользователя на эту страницу с помощью HTTPS, и установить HSTS
            // заголовок так, что браузер будет автоматически преобразовывать все ссылки на эту страницу с HTTPS
            // в течение следующего года
            force_https();
        }
    }

    public function index()
    {
        $data = [
            ...
        ];

        // Установка некоторых правил кэширования HTTP для этой страницы.
        $this->response->setCache([
            'max-age' => 300,
            's-max-age' => 900,
            'etag' => 'foo'
        ]);

        // Возврат JSON
        $this->response->setContentType('application/json')
                       ->setOutput(json_encode($data));
    }
}


В этом примере, были сделаны три основные вещи:

  • Мы заставили эту страницу получить доступ через HTTPS обоими перенаправлениями на версию HTTPS текущего URL, а также путем создания заголовка Strict-Transport-Security, который поддерживается большинством основных производителей браузеров и позволяет браузеру преобразовать URL в HTTPS автоматически перед отправкой запроса.
  • Произвели установку некоторых правила кэширования HTTP, чтобы помочь браузеру знать, когда он может повторно использовать данные, которые он уже имеет. Это означает меньшее количество HTTP-запросов и увеличение производительности загрузки.
  • Произвели вывод некоторых необходимых данных в формате JSON.


Стоит также отметить, что Lonnie Ezell пообещал делиться краткими обзорами о новом функционале фреймворка каждые несколько недель.

Ссылки по теме:


CodeIgniter Wikipedia: ru.wikipedia.org/wiki/CodeIgniter
Официальный сайт CodeIgniter: www.codeigniter.com
Официальный форум CodeIgniter: forum.codeigniter.com
Блог Лонни Эцелла: Requests и Responses in Codeigniter 4
HSTS: ru.wikipedia.org/wiki/HSTS
CLI: https://ru.wikipedia.org/wiki/Call_Level_Interface
CodeIgniter 4: https://habrahabr.ru/post/275657/
CI Community Apps: https://habrahabr.ru/post/276375/
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 14: ↑11 and ↓3+8
Comments10

Articles