Жизненный цикл запроса.

Содержание:


Введение

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

Цель этого документа предоставить хороший обзор высокого уровня того, как разботает фреймворк Ларавел. В процессе обучения новому, достижения глубинного понимания процессов, становится меньше "магии", и вы будете чувствовать себя увереннее при построении веб-приложения. Если пока нет должного понимания того, как это устроено, не останавливайтесь. Попробуйте продолжить разбираться, со временем, всё станет понятным. Уровень знаний будет расти с каждой секцией документации.


Обзор жизненного цикла

Первые шаги

Файл 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 практически пуст. Это прекрасное место, чтобы добавить ваши загрузчики. Для больших приложений, вы можете создать несколько сервис провайдеров, каждый с более детализированным типом начальной загрузки.