Любите загадки? Событие еще доступно на сайте.
Ищете работу? Мы поможем!
Ищете работу? Мы поможем!

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

Вы просматриваете документ для прошлой версии.
Рассмотрите возможность обновления вашего проекта до актуальной версии 10.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. По умолчанию он почти пустой. Этот провайдер является отличным местом для добавления в ваше приложение собственной начальной загрузки и привязок сервис-контейнера. Конечно, в случае больших приложений, возможно вы захотите создать несколько файлов сервис-провайдеров, каждый со своей специализацией.