Введение
При использовании любого инструмента в «реальном мире» вы чувствуете больше уверенности, когда понимаете, как он устроен. Разработка приложений — не исключение. Когда вы понимаете, как функционируют ваши средства разработки, вы чувствуете себя более комфортно и уверенно.
Задача этого документа состоит в том, чтобы дать вам хороший поверхностный обзор того, как работает фреймворк 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, который определяет массив загрузчиков PHPbootstrappers
, которые будут запущены перед выполнением запроса. Эти загрузчики настраивают обработку ошибок, настраивают ведение журналов, определяют среду приложения и выполняют другие задачи, которые надо выполнить перед самой обработкой запроса.
HTTP-ядро также определяет список посредников HTTP, через которые должны пройти все запросы, прежде чем будут обработаны приложением. Эти посредники обрабатывают чтение и запись HTTP-сессии, определяя, находится ли приложение в режиме обслуживания, проверяют CSRF-последовательность, и т.п.
Принцип действия метода PHPhandle
HTTP-ядра очень прост: получить Request и вернуть Response. Представьте ядро как большую чёрную коробку, которая представляет собой всё ваше приложение. Наполняйте его HTTP-запросами и оно будет возвращать HTTP-ответы.
Поставщики услуг
Одно из важнейших действий ядра при загрузке — загрузка поставщиков услуг для вашего приложения. Все поставщики услуг настраиваются в конфигурационном файле config/app.php в массиве providers. Сначала будет вызван метод PHPregister
для всех поставщиков, а когда все они будут зарегистрированы, будет вызван метод PHPboot
.
Поставщики услуг отвечают за начальную загрузку всевозможных компонентов фреймворка: БД, очередь, проверка ввода и маршрутизация. Поставщики услуг — важнейший элемент всего процесса начальной загрузки Laravel, так как они отвечают за загрузку и настройку всех возможностей, необходимых фреймворку.
Отправка запроса
Когда приложение загружено, и все поставщики услуг зарегистрированы, запрос Request будет передан роутеру для отправки. Роутер отправит запрос по маршруту или контроллеру, а также запустит посредника, соответствующего маршруту.
Сконцентрируйтесь на поставщиках услуг
Поставщики услуг — поистине ключ к загрузке Laravel-приложения. Экземпляр приложения создан, поставщики услуг зарегистрированы, и запрос передан в загруженное приложение. Вот так просто!
Очень важно иметь хорошее понимание того, как строится и загружается Laravel-приложение с помощью поставщиков услуг. Само собой поставщики услуг вашего приложения по умолчанию хранятся в app/Providers.
По умолчанию AppServiceProvider довольно пуст. Этот поставщик является отличным местом для добавления в ваше приложение собственной автозагрузки и привязок сервис-контейнера. Для больших приложений вы можете создать несколько поставщиков услуг, которые будут содержать определённые части автозагрузки.