Жизненный цикл запроса в Laravel
Введение
При использовании любого инструмента в «реальном мире» вы чувствуете себя более уверенно, если понимаете, как этот инструмент работает. Разработка приложений ничем не отличается. Когда вы понимаете, как работают ваши инструменты разработки, вы чувствуете себя более комфортно и уверенно с ними.
Цель этого документа - дать вам хороший общий обзор того, как работает фреймворк Laravel. Если вы лучше познакомитесь с общей структурой, все станет менее "волшебным", и вы будете более уверены в создании своих приложений. Если вы не сразу поняли все термины, не унывайте! Просто попытайтесь получить общее представление о том, что происходит, и ваши знания будут расширяться по мере изучения других разделов документации.
Обзор жизненного цикла Laravel
Первичное о работе приложения на Laravel
Точкой входа для всех запросов к приложению Laravel является файл public/index.php
. Все запросы направляются в этот файл конфигурацией вашего веб-сервера (Apache / Nginx). Файл index.php
не содержит большого количества кода. Скорее, это отправная точка для загрузки остальной части фреймворка.
Файл index.php
загружает определение автозагрузчика, созданное Composer, а затем извлекает экземпляр приложения Laravel из bootstrap/app.php
. Первым действием, предпринимаемым самим Laravel, является создание экземпляра контейнера приложения / службы [service container].
Ядро HTTP и ядро консоли
Затем входящий запрос отправляется либо ядру HTTP, либо ядру консоли, в зависимости от типа запроса, поступающего в приложение. Эти два ядра служат центральным местом, через которое проходят все запросы. А пока давайте сосредоточимся на ядре HTTP, которое находится в app/Http/Kernel.php
.
Ядро HTTP расширяет класс Illuminate\Foundation\Http\Kernel
, который определяет массив bootstrappers
, которые будут запускаться перед выполнением запроса. Эти загрузчики настраивают обработку ошибок, настраивают ведение журнала, обнаруживают среду приложения и выполняют другие задачи, которые необходимо выполнить до фактической обработки запроса.
Ядро HTTP также определяет список промежуточного программного обеспечения [middleware] HTTP, через которое должны пройти все запросы, прежде чем они будут обработаны приложением. Это промежуточное ПО обрабатывает чтение и запись сеанса HTTP, определяет, находится ли приложение в режиме обслуживания, проверяет токен CSRF и т.д..
Сигнатура метода дескриптора ядра HTTP handle
довольно проста: получить запрос Request
и вернуть ответ Response
. Думайте о ядре как о большом черном ящике, который представляет все ваше приложение. Подайте ему HTTP-запросы, и он вернет HTTP-ответы.
Поставщики услуг [Service Providers]
Одним из наиболее важных действий начальной загрузки ядра является загрузка поставщиков услуг [Service Providers] для вашего приложения. Все поставщики услуг для приложения настраиваются в массиве поставщиков providers
файла конфигурации config/app.php
. Сначала будет вызван метод регистрации register
для всех провайдеров, затем, когда все провайдеры будут зарегистрированы, будет вызван метод загрузки boot
.
Поставщики услуг несут ответственность за загрузку всех различных компонентов инфраструктуры, таких как компоненты базы данных, очереди, проверки и маршрутизации. Поскольку они загружают и настраивают каждую функцию, предлагаемую фреймворком, поставщики услуг являются наиболее важным аспектом всего процесса начальной загрузки Laravel.
Запрос на отправку
После начальной загрузки приложения и регистрации всех поставщиков услуг запрос Request
будет передан маршрутизатору для отправки. Маршрутизатор отправит запрос на маршрут или контроллер, а также запустит промежуточное ПО для конкретного маршрута.
Фокус на Service Providers
Поставщики услуг действительно являются ключом к начальной загрузке приложения Laravel. Экземпляр приложения создается, поставщики услуг регистрируются, и запрос передается загружаемому приложению. Это действительно так просто!
Очень важно иметь четкое представление о том, как создается и загружается приложение Laravel через поставщиков услуг. Поставщики услуг по умолчанию для вашего приложения хранятся в каталоге app/Providers
.
По умолчанию AppServiceProvider
довольно прост и не содержит много кода. Этот провайдер - отличное место для добавления собственных привязок начальной загрузки вашего приложения и контейнеров служб. Для больших приложений вы можете создать несколько поставщиков услуг, каждый с более детальным типом начальной загрузки.
Перевод:
https://laravel.com/docs/8.x/lifecycle
Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)