Лонни Эцелл (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/