Жизненный цикл запроса.
Содержание:
Введение
Когда используешь инструмент в "реальном мире", всегда чувствуешь себя значительно увереннее, когда точно понимаешь как этот инструмент работает. Разработка приложений не исключение. Когда есть понимение как работает та или иная веб-функция, процесс разработки движется быстрее, нет заминок, больше уверенности.
Цель этого документа предоставить хороший обзор высокого уровня того, как разботает фреймворк Ларавел. В процессе обучения новому, достижения глубинного понимания процессов, становится меньше "магии", и вы будете чувствовать себя увереннее при построении веб-приложения. Если пока нет должного понимания того, как это устроено, не останавливайтесь. Попробуйте продолжить разбираться, со временем, всё станет понятным. Уровень знаний будет расти с каждой секцией документации.
Обзор жизненного цикла
Первые шаги
Файл public/index.php
служит отправной точкой для всех запросов приложения Laravel.
Все запросы направляются на этот файл конфигурацией вашего сервера (Apache/Nginx). Файл
index.php
не содержит много кода. Этот файл служит начальным пунктом загрузки всего
фреймворка.
Файл index.php
загружает сгенерированные автозагрузчиком Composer определения, и потом
извлекает сущность приложения Laravel из скрипта bootstrap/app.php
. Первое действие, которое
делает фреймворк — это создаёт сущность приложения /
Сервис контейнер.
HTTP / Ядра консоли
После чего, запрос может пройти через HTTP ядро или ядро консоли. Это зависит от типа запроса приложения.
Эти два ядра служат в качестве центральной локации, через которую проходят все запросы. Давайте сфокусируемся
на HTTP ядре, которое расположено в app/Http/Kernel.php
.
Ядро HTTP расширяет класс Illuminate\Foundation\Http\Kernel
,
который определяет массив загрузчиков bootstrappers
, которые будут запущены
до выполнения запроса. Эти загрузчики настраивают конфигурацию обработчиков ошибок, настраивает журналы,
определяет окружение приложения, и выполняет другие необходимые задачи, до момента фактической обработки
запроса.
Ядро HTTP дополнительно определяет список HTTP посредников, которых проходят все запросы передзапуском самого приложения. Промежуточный слой или посредники опреляют взаимодействие с HTTP сессиями, определяют находится ли приложение в режиме обслуживания, проводят верификацию CSRF токена и другое.
Метод signature
для метода ядра HTTP handle
предельно прост: получить
Request
и вернуть Response
. Можно воспринимать ядро как большой чёрный ящик,
который представляет ваше приложение. Дайте ему HTTP запросы и он вернёт HTTP ответы.
Сервис провайдеры
Одно из самых важных действий загрузчика ядра — это загрузка
сервис провайдеров для вашего приложения. Все сервис провайдеры для вашего
приложения указаны в файле config/app.php
в массиве providers
.
Метод register
вызывается для всех провайдеров, и после того, как все провайдеры
зарегистрированы, будет вызван метод boot
.
Сервис провайдеры отвечают за загрузку всех компонентов фреймворка, таких как базы данных, очереди, валидация, компонент маршрутов и другое. Сервис провайдеры играют ключевую роль на этапе загрузки.
Отправка запроса
После загрузки приложения и регистрации всех сервис провайдеров, Request
будет передан
маршрутизатору для отправки. Роутер направит запрос по муршруту или на контроллер, а ещё проведёт через
промежуточный слой для данного запроса.
Фокус на Service Providers
Сервис провайдеры действительно являются ключом к загрузке приложения Laravel. Сущность приложения создана, зарегистрированы сервис провайдеры, и запрос передаётся к загрузке приложения. Это просто!
Очень важно иметь чёткое представление о том, как приложение Ларавел построено и загружается через сервис
провайдеры. Сервис провайдеры вашего приложения находятся в папке app/Providers
По умолчанию, AppServiceProvider
практически пуст. Это прекрасное место, чтобы добавить
ваши загрузчики. Для больших приложений, вы можете создать несколько сервис провайдеров, каждый с более
детализированным типом начальной загрузки.