Жизненный цикл запроса
11.x
.
Почему это важно?
Введение
При использовании любого инструмента в “реальном мире” вы чувствуете больше уверенности, когда понимаете, как он устроен. Разработка приложений — не исключение. Когда вы понимаете каким образом функционируют ваши средства разработки, то чувствуете себя более комфортно и уверенно.
Задача этого документа – дать вам хороший поверхностный обзор того, как работает фреймворк Laravel. Чем лучше вы узнаете фреймворк, тем меньше в нем остается “волшебства”, и тем более уверенно вы будете создавать приложения. Не отчаивайтесь, если не поймете всё сразу! Постарайтесь просто получить базовое понимание того, что происходит, и ваши знания будут расти по мере изучения других разделов документации.
Обзор жизненного цикла
Первые шаги
Входная точка для всех запросов к приложению Laravel – файл public/index.php
. Все запросы направляются в этот файл настройками вашего веб-сервера (Apache / nginx). Файл index.php
не содержит много кода. Скорее, это просто отправная точка для загрузки всего остального фреймворка.
Файл index.php
загружает автозагрузчик, который сгенерировал Composer, а затем извлекает экземпляр Laravel-приложения из скрипта bootstrap/app.php
. Первое действие самого Laravel – создать экземпляр приложения / сервис-контейнера.
Ядра HTTP / Console
Затем входящий запрос посылается либо в HTTP-ядро, либо в ядро консоли, в зависимости от типа этого запроса. Эти два ядра служат центральным местом, через которое протекают все запросы. Пока давайте рассмотрим HTTP-ядро, которое расположено в app/Http/Kernel.php
.
HTTP-ядро наследует класс Illuminate\Foundation\Http\Kernel
, который определяет массив загрузчиков bootstrappers
, которые будут запущены перед выполнением запроса. Эти загрузчики настраивают обработку ошибок, ведение журналов, определяют среду приложения и выполняют другие задачи, которые надо выполнить перед самой обработкой запроса.
HTTP-ядро также определяет список HTTP посредников, через которые должны пройти все запросы, прежде чем будут обработаны приложением. Эти посредники обрабатывают чтение и запись HTTP-сессии, определяя, находится ли приложение в режиме обслуживания, проверяя CSRF-токен и др.
Принцип действия метода handle
HTTP-ядра довольно прост: получить Request
и вернуть Response
. Представьте ядро в виде большого черного ящика, который представляет собой всё ваше приложение. Наполняйте его HTTP-запросами и он будет возвращать HTTP-ответы.
Сервис-провайдеры
Одно из важнейших действий ядра при загрузке — загрузка сервис-провайдеров для вашего приложения. Все сервис-провайдеры настраиваются в конфиге config/app.php
массива providers
. Сначала будет вызван метод register
для всех сервис-провайдеров, а когда все они будут зарегистрированы, будет вызван метод boot
.
Сервис-провайдеры отвечают за начальную загрузку всевозможных компонентов фреймворка: таких как БД, очередь, проверка ввода и маршрутизация. Сервис-провайдеры — важнейший элемент всего процесса начальной загрузки Laravel, так как они отвечают за загрузку и настройку всех возможностей фреймворка.
Выполнение запроса
Как только все сервис-провайдеры зарегистрированы и приложение загружено, Request
поступает в роутер для обработки. Роутер отправит запрос по роуту или контроллеру, а также запустит посредника, соответствующего роуту.
Фокус на сервис-провайдеры
Сервис-провайдеры — поистине ключ к инициализации и настройке Laravel-приложения. Создаётся экземпляр приложения, регистрируются сервис-провайдеры, и запрос передается в загруженное приложение. Всё действительно просто!
Очень важно иметь хорошее понимание того, как Laravel-приложение строится и загружается через сервис-провайдеры. Конечно, сервис-провайдеры вашего приложения по-умолчанию хранятся в директории app/Providers
.
Основной файл, на который вам надо обратить внимание – AppServiceProvider
. По умолчанию он почти пустой. Этот провайдер является отличным местом для добавления в ваше приложение собственной начальной загрузки и привязок сервис-контейнера. Конечно, в случае больших приложений, возможно вы захотите создать несколько файлов сервис-провайдеров, каждый со своей специализацией.