Вступление

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

Цель этого документа - дать вам общий обзор того, как работает фреймворк Laravel. Познакомившись с общей структурой лучше, все станет менее «волшебным», и вы будете более уверенно строить свои приложения. Если вы не понимаете все термины сразу, не падайте духом! Просто попытайтесь получить общее представление о том, что происходит, и ваши знания будут расти по мере изучения других разделов документации.

 

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

Первые вещи

Точкой входа для всех запросов к приложению Laravel является файл. Все запросы направляются в этот файл конфигурацией вашего веб-сервера (Apache / Nginx). Файл не содержит много кода. Скорее, это отправная точка для загрузки остальной части фреймворка.public/index.phpindex.php

Файл загружает Composer генерируется определение автозагрузчика, а затем возвращает экземпляр приложения Laravel из сценария. Первое действие, предпринятое самим Laravel, - создать экземпляр контейнера приложения / службы .index.phpbootstrap/app.php

HTTP / Консольные Ядра

Затем входящий запрос отправляется либо ядру HTTP, либо ядру консоли, в зависимости от типа запроса, поступающего в приложение. Эти два ядра служат центральным местом, через которое проходят все запросы. А сейчас давайте сосредоточимся на ядре HTTP, которое находится в .app/Http/Kernel.php

Ядро HTTP расширяет класс, который определяет массив, который будет запущен до выполнения запроса. Эти загрузчики настраивают обработку ошибок, настраивают ведение журнала, обнаруживают среду приложения и выполняют другие задачи, которые необходимо выполнить до фактической обработки запроса.Illuminate\Foundation\Http\Kernelbootstrappers

Ядро HTTP также определяет список промежуточного ПО HTTP, через которое все запросы должны пройти, прежде чем они будут обработаны приложением. Это промежуточное программное обеспечение обрабатывает чтение и запись сеанса HTTP , определяет, находится ли приложение в режиме обслуживания, проверяет токен CSRF и многое другое.

Подпись метода для метода ядра HTTP handleдовольно проста: получить a Requestи вернуть a Response. Представьте, что ядро ​​- это большой черный ящик, представляющий все ваше приложение. Подайте ему HTTP-запросы, и он вернет HTTP-ответы.

Поставщики услуг

Одним из наиболее важных действий начальной загрузки ядра является загрузка поставщиков услуг для вашего приложения. Все поставщики услуг для приложения настраиваются в массиве файла конфигурации . Сначала метод будет вызываться для всех поставщиков, затем, после регистрации всех поставщиков, будет вызван метод.config/app.phpprovidersregisterboot

Поставщики услуг отвечают за загрузку всех различных компонентов инфраструктуры, таких как база данных, очередь, проверка и компоненты маршрутизации. Поскольку они загружают и настраивают каждую функцию, предлагаемую платформой, поставщики услуг являются наиболее важным аспектом всего процесса начальной загрузки Laravel.

Запрос на отправку

После того, как приложение было загружено и все поставщики услуг зарегистрированы, оно Requestбудет передано маршрутизатору для отправки. Маршрутизатор отправит запрос на маршрут или контроллер, а также запустит любое промежуточное программное обеспечение для конкретного маршрута.

 

Сосредоточиться на поставщиках услуг

Поставщики услуг действительно являются ключом к загрузке приложения Laravel. Экземпляр приложения создается, поставщики услуг регистрируются, и запрос передается загруженному приложению. Это действительно так просто!

Очень важно иметь представление о том, как приложение Laravel создается и загружается через поставщиков услуг. Поставщики услуг по умолчанию вашего приложения хранятся в каталоге.app/Providers

По умолчанию AppServiceProviderоно довольно пустое. Этот провайдер является отличным местом для добавления собственных загрузочных привязок вашего приложения и привязок контейнера сервисов. Для больших приложений вы можете создать несколько поставщиков услуг, каждый из которых имеет более детальный тип начальной загрузки.