Документация Laravel 10.x
Здесь ты найдешь сниппеты по Laravel и полезные советы по веб-разработке.
При использовании любого инструмента в "реальном мире" вы чувствуете себя увереннее, если вы понимаете, как работает этот инструмент. Разработка приложений не исключение. Когда вы понимаете, как функционируют ваши инструменты разработки, вы чувствуете себя более комфортно и уверенно используете их.
Цель этого документа - предоставить вам хороший обзор работы фреймворка Laravel на высоком уровне. Узнав общую структуру фреймворка, все становится менее "волшебным", и вы будете более уверены в создании своих приложений. Если вы не понимаете все термины сразу, не теряйте сердце! Просто попытайтесь освоить основы происходящего, и ваше знание будет расти, когда вы будете исследовать другие разделы документации.
Точкой входа для всех запросов к приложению Laravel является файл public/index.php
. Все запросы направляются на этот файл конфигурацией вашего веб-сервера (Apache / Nginx). Файл index.php
не содержит много кода. Это, скорее, отправная точка для загрузки остальной части фреймворка.
Файл index.php
загружает определение автозагрузчика, созданного Composer, а затем извлекает экземпляр приложения Laravel из bootstrap/app.php
. Первое действие, выполняемое Laravel самим собой, - создание экземпляра приложения / контейнера служб.
Затем входящий запрос отправляется либо в HTTP-ядру, либо в консольное ядро, в зависимости от типа запроса, поступающего в приложение. Эти два ядра служат центральным местом, через которое проходят все запросы. Пока давайте сосредоточимся на HTTP-ядре, которое находится в app/Http/Kernel.php
.
HTTP-ядро расширяет класс Illuminate\Foundation\Http\Kernel
, который определяет массив "загрузчиков", которые будут запущены до выполнения запроса. Эти загрузчики настраивают обработку ошибок, настраивают ведение журнала, определяют окружение приложения и выполняют другие задачи, которые необходимо выполнить до обработки запроса. Обычно эти классы обрабатывают внутреннюю конфигурацию Laravel, о которой вам не нужно беспокоиться.
HTTP-ядро также определяет список HTTP-промежуточного программного обеспечения (middleware), через которое должны проходить все запросы перед обработкой приложением. Эти промежуточные программы обрабатывают чтение и запись HTTP-сессии, определение того, находится ли приложение в режиме обслуживания, проверку маркера CSRF и многое другое. Мы поговорим о них подробнее вскоре.
Сигнатура метода handle
HTTP-ядра довольно проста: он принимает Request
и возвращает Response
. Представьте ядро как большой черный ящик, представляющий собой ваше целое приложение. Подающиеся ему HTTP-запросы приведут к возврату HTTP-ответов.
Одним из самых важных этапов загрузки ядра является загрузка служб-поставщиков (service providers) для вашего приложения. Службы-поставщики отвечают за запуск всех различных компонентов фреймворка, таких как база данных, очередь, валидация и маршрутизация. Все службы-поставщики для приложения настраиваются в массиве providers
файла конфигурации config/app.php
.
Laravel пройдет по этому списку провайдеров и создаст каждый из них. После создания провайдеров будет вызван метод register
на всех провайдерах. Затем, после того как все провайдеры будут зарегистрированы, будет вызван метод boot
на каждом провайдере. Это необходимо, чтобы службы-поставщики могли зависеть от того, что все привязки контейнера будут зарегистрированы и будут доступны к моменту выполнения их метода boot
.
Практически каждая основная функция, предлагаемая Laravel, создается и настраивается службой-поставщиком. Поскольку они запускают и настраивают множество функций, предлагаемых фреймворком, службы-поставщики являются самым важным аспектом всего процесса загрузки Laravel.
Один из наиболее важных служб-поставщиков в вашем приложении - это App\Providers\RouteServiceProvider
. Этот служб-поставщик загружает файлы маршрутов, содержащиеся в каталоге routes
вашего приложения. Дерзайте, откройте код RouteServiceProvider
и посмотрите, как он работает!
Как только приложение будет загружено, и все службы-поставщики будут зарегистрированы, Request
передается маршрутизатору для диспетчеризации. Маршрутизатор направит запрос на маршрут или контроллер, а также выполнит любые связанные с маршрутом промежуточные программы.
Промежуточные программы предоставляют удобный механизм для фильтрации или анализа HTTP-запросов, поступающих в ваше приложение. Например, в Laravel есть промежуточная программа, которая проверяет, аутентифицирован ли пользователь вашего приложения. Если пользователь не аутентифицирован, промежуточная программа перенаправит пользователя на экран входа. Однако, если пользователь аутентифицирован, промежуточная программа разрешит запросу продвигаться дальше в приложение. Некоторые промежуточные программы назначаются всем маршрутам в приложении, как определено в свойстве $middleware
ядра HTTP, в то время как некоторые назначаются только определенным маршрутам или группам маршрутов. Вы можете узнать больше о промежуточных программах, прочитав полную документацию по промежуточным программам.
Если запрос проходит через все промежуточные программы, назначенные соответствующему маршруту, будет выполнен метод маршрута или контроллера, и ответ, возвращаемый методом маршрута или контроллера, будет отправлен обратно через цепочку промежуточных программ маршрута.
Как только метод маршрута или контроллера возвращает ответ, ответ перемещается обратно через промежуточные программы маршрута, предоставляя приложению возможность изменить или проанализировать исходящий ответ.
Наконец, после того как ответ проходит через промежуточные программы, метод handle
HTTP-ядра возвращает объект ответа, и файл index.php
вызывает метод send
возвращенного ответа. Метод send
отправляет содержимое ответа в веб-браузер пользователя. Мы завершили наше путешествие по всему жизненному циклу запроса Laravel!
Службы-поставщики действительно являются ключом к стартовой загрузке приложения Laravel. Создается экземпляр приложения, регистрируются службы-поставщики, и запрос передается стартованному приложению. Все довольно просто!
Понимание того, как построено и загружается приложение Laravel через службы-поставщики, очень ценно. Службы-поставщики вашего приложения по умолчанию хранятся в каталоге app/Providers
.
По умолчанию AppServiceProvider
довольно пуст. Этот поставщик отличное место, чтобы добавить собственную начальную загрузку и привязки контейнера служб. Для крупных приложений вы можете создавать несколько служб-поставщиков, каждый с более детализированной начальной загрузкой для конкретных служб, используемых вашим приложением.