git 4deba2bfca6636d5cdcede3f2068eff3b59c15ce
Когда вы используете какую-то вещь, вы получаете гораздо больше удовольствия от неё, когда понимаете, как она работает. Разработка приложений не исключение. Когда вы понимаете, как именно функционирует ваше средство разработки, вы можете использовать его более уверенно - не просто копируя "магические" куски кода из мануала или других приложений, а точно зная, что вы хотите получить.
Цель этого документа - дать вам хороший высокоуровневый взгляд на то, как работает фреймворк Laravel.
Не расстраивайтесь, если поначалу вам будут непонятны какие-то термины. Просто попробуйте получить базовое понимание происходящего, а ваши знания будут расти по мере того как вы будете изучать другие части документации Laravel.
Точка входа в приложение Laravel - файл public/index.php
. Все запросы веб-сервер (Apache или Nginx) направляет сюда. Файл не содержит много кода, это просто точка, откуда начинает загружаться фреймворк и где отдается контент браузеру.
index.php
загружает созданный Composer-ом автозагрузчик классов и при помощи bootstrap/app.php
создает $app
- объект приложения, или сервис-контейнер.
Далее запрос поступает или в ядро обработки HTTP-запросов или в ядро обработки консольных запросов - в зависимости от того, откуда пришел запрос. Для примера остановимся на HTTP-ядре, app/Http/Kernel.php
.
HTTP-ядро наследуется от класса Illuminate\Foundation\Http\Kernel
, в котором определён массив bootstrappers
с классами, которые должны запускаться перед обработкой запроса. Там есть обработчики ошибок, класс, конфигурирующий логирование, классы, реализующие загрузку конфигов, получение названия среды выполнения и выполнения других задач, которые должны быть исполнены перед обработкой запроса.
В HTTP-ядре также определён список middleware (посредников), через которые должен пройти запрос и быть разрешённым к исполнению. Посредники реализуют чтение и запись HTTP-сессии, определяют, находится ли приложение в режиме обслуживания, проверяют CSRF-токен и т.п.
HTTP-ядро - это как некий черный ящик. Принимает на вход Request
(запрос) и отдает Response
(ответ).
Один из самых важных моментов в первой фазе работы фреймворка - загрузка сервис-провайдеров вашего приложения. Список загружаемых сервис-провайдеров находится в файле config/app.php
в массиве providers
. В процессе загрузки выполняется метод register
каждого сервис-провайдера, а когда все они будут загружены - метод boot
, также у каждого сервис-провайдера.
Как только все сервис провайдеры зарегистрированы и приложение загружено, Request
поступает в роутер для обработки. Там фреймворк принимает решение, в какой именно роут попадает запрос, через какую цепочку посредников он должен пройти и в какой метод какого контроллера попасть.
Сервис-провайдер - ключевая вещь фреймворка, ключ к пониманию процесса загрузки (bootstrapping) вашего приложения.
Ваши сервис-провайдеры находятся в папке app/Providers
. Дефолтный стартовый сервис-провайдер приложения AppServiceProvider
не содержит почти ничего, его должны заполнить вы - регистрацией сервис-провайдеров модулей, биндингами в сервис-контейнер своих классов и фасадов и т.д.