Лекция
Привет, Вы узнаете о том , что такое жизненный цикл запроса в laravel, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое жизненный цикл запроса в laravel , настоятельно рекомендую прочитать все из категории Фреймворки. Famworks ( программная платформа).
Когда вы используете что то, вы получаете от нее гораздо больше удовольствия, когда понимаете, как она работает. Разработка приложений не является исключением. Когда вы точно понимаете, как функционирует ваш инструмент разработки, вы можете использовать его более уверенно - не просто копируя «волшебные» фрагменты в руководство или другие приложения, но точно зная, что вы хотите получить. Цель этого документа - дать вам хорошее представление о том, как работает фреймворк Laravel. В дополнение к этому мы рассмотрим файлы запуска и события приложения (события приложения).
Не расстраивайтесь, если сначала вы не поймете какие-либо термины. Просто попытайтесь получить общее представление о том, что происходит, и ваши знания будут расти по мере изучения других частей этого руководства.
Используя правила .htaccess Apache или Nginx или другой веб-сервер, все запросы отправляются в файл public / index.php. Отсюда Laravel начинает процесс обработки запроса и тут же возвращает ответ пользователю.
Конечно, наиболее важной концепцией при изучении процесса начальной загрузки Laravel является поставщик услуг (буквально «поставщик услуг», далее «поставщик услуг»). Вы можете найти список поставщиков услуг в файле config / app.php в массиве поставщиков. Эти провайдеры являются основным механизмом настройки (начальной загрузки) функционала Laravel. Но прежде чем разбираться в их работе подробно, вернемся к public / index.php. После его вызова файл bootstrap / start.php представляет собой bootstrap / start.php, в котором создается объект Application, который также служит контейнером IoC.
После создания объекта Application устанавливаются пути к некоторым важным папкам каркаса и устанавливаются критерии для параметров среды. Затем вызывается сценарий настройки фреймворка, который помимо настройки часового пояса, уровня error_reporting и т. д. Делает очень важную вещь - регистрация поставщиков услуг, объявленная в config / app.php.
У простых поставщиков услуг есть только один метод: register (). Этот метод вызывается, когда поставщик услуг регистрируется в объекте Application. В рамках этого метода поставщики услуг регистрируют некоторые свои вещи в контейнере IoC. По сути, каждый поставщик услуг как поставщик услуг добавляет одну или несколько функций закрытия к контейнеру, что позволяет вам получить доступ к этим «услугам» в вашем приложении. Например, QueueServiceProvider регистрирует функции закрытия, которые разрешают различные классы, связанные с очередями. Конечно, поставщиков услуг можно использовать для любых действий по настройке инфраструктуры, а не только для регистрации вещей с помощью контейнера IoC. Поставщик услуг может регистрировать прослушиватели событий, просматривать композиторов, команды Artisan и т. д.
После регистрации всех поставщиков услуг файлы загружаются из приложения / запуска. Затем app / rout.php, и в зависимости от того, какой маршрут выбран для работы, объект Request отправляется в Application.
Суммируя:
Теперь посмотрим повнимательнее на файлы в app/start.
Стартовые файлы вашего приложения находятся в папке app / start. По умолчанию их три: artisan.php, global.php и local.php.
Вы можете узнать о файле artisan.php в разделе Artisan.
В частности, файл global.php содержит регистрацию Logger и подключение файла фильтра app / filters.php. Вы можете добавить к нему то, что вы хотите - этот файл вызывается при каждом запросе, независимо от текущей среды выполнения. Файл local.php, как следует из названия, подключается только тогда, когда приложение работает в локальной среде выполнения. Подробнее о средах исполнения и их конфигурации вы можете узнать в соответствующем разделе - Конфигурация.
Если в вашем приложении есть несколько других сред выполнения, например, production, вы можете создать production.php. Он будет подключаться, когда приложение вызывается в соответствующей среде.
Что поместить в стартовые файлы
Загрузочные файлы - это место для кода, который загружает ваше приложение. Например, вы можете зарегистрировать просмотр композиторов там, установить настройки ведения журнала, установить некоторые настройки PHP, которые нужны вашему приложению. Конечно, вы не должны помещать абсолютно весь код инициализации в стартовые файлы, так как в этом случае легко запутаться в этом коде. Если вы понимаете, что в стартовых файлах есть свалка мусора, выделите часть кода инициализации поставщикам услуг.
Регистрация обработчиков событий
Вы также можете делать пред- или пост-обработку запроса, регистрируя обработчики событий before,after, close, finish и shutdown:
App::before(function()
{
//
});
App::after(function($request, $response)
{
//
});
Эти обработчики будут запущены соответственно до и после каждого вызова в вашем приложении. Эти события полезны, если вам надо фильтровать запрос или модифицировать ответ глобально для всего приложения. Вы можете зарегистрировать эти обработчики в глобальном старт-файле или в одном из ваших сервис-провайдеров.
Вы также можете зарегистрировать событие, которое вызовется по совпадению роута (маршрута). Событие запускается перед запуском роута.
Route::matched(function($route, $request)
{
//
});
Событие finish вызывается после того, как ваше приложение отсылает сформированный ответ клиенту. Событие shutdown вызывается немедленно после всех обработчиков события finish и это последняя возможность сделать какие-то действия перед тем как приложение завершится. Скорее всего у вас не будет необходимости использовать эти события.

Стандартный жизненный цикл состоит из следующих элементов:
HTTP-запрос через Маршруты (Routes) отправляется в Контроллер (Controller)
Контроллер выполняет некоторые действия в зависимости от запроса и передает данные в представления.
Отображения отображают полученные данные указанным способом, предоставляя ответ HTTP.
Существует много отклонений и различных вариантов вышеуказанной схемы, но это дает нам три основных момента, на которые следует обратить внимание:
Маршруты - app / route.php
Контроллеры - приложение / контроллеры /
Views - приложение / views /
«Отклонения» могут быть, например, такими:
Маршруты могут возвращать сопоставления или сам ответ (объект ответа) без использования контроллеров.
До или после маршрутов, фильтры могут быть запущены (app / filters.php)
Исключения или ошибки приложения могут помешать процессу.
Отзывы на события.
Копать глубже
Более глубокое понимание жизненного цикла запроса в Laravel позволит вам точно понять, где вы можете (и должны) писать свой код.

Цикл запроса можно разделить на три части: загрузка (Loading), инициализация (Booting) и работа (Running).
Loading → старт приложения, автозагрузка, создание контейнера.
Booting → регистрация и настройка сервисов, подготовка инфраструктуры.
Running → выполнение запроса, маршрутизация, бизнес-логика, формирование ответа.


На этом этапе фреймворк начинает работу с момента входа HTTP-запроса:
Загружается public/index.php, который является точкой входа.
Инициализируется автозагрузчик Composer.
Создается экземпляр приложения (Illuminate\Foundation\Application).
Подключаются базовые конфигурации и сервис-провайдеры, необходимые для старта.
Смысл: подготовить окружение и базовые зависимости, чтобы Laravel мог начать работу.
Вот три основные области, где ваше приложение может повлиять на процесс загрузки фреймворка:

После загрузки идет процесс "bootstrapping":
Регистрируются все Service Providers (например, для базы данных, очередей, маршрутизации).
Выполняется метод boot() у провайдеров, где обычно настраиваются события, middleware и прочие механизмы.
Загружаются конфигурации (config/*.php), локализация, настройки окружения.
Инициализируется Kernel (HTTP или Console), который управляет обработкой запроса.
Смысл: подготовить все сервисы и инфраструктуру, чтобы приложение было готово к выполнению запроса.
Есть 10 областей, где вы можете влиять на процесс инициализации структуры.

Это финальная стадия — непосредственная обработка запроса:
Kernel принимает запрос и прогоняет его через middleware.
Определяется маршрут (Route) и вызывается соответствующий контроллер или замыкание.
Выполняется бизнес-логика, обращение к БД, формирование ответа.
Ответ проходит через завершающие middleware и возвращается пользователю.
Смысл: выполнить сам запрос и вернуть корректный HTTP-ответ.
10 областей, где вы можете влиять на процесс выполнения:
Режим обслуживания Если вы зарегистрировали функцию-подписчика режима обслуживания и приложение находится в этом режиме, эта функция выполняется.
Фильтр before уровня приложения Если у вас есть фильтры, зарегистрированные в App::before(), они выполняются.
Фильтры before в роутах. Если у вас есть фильтры before в роутах, они выполняются.
Исполнение запроса. После разбора, к какому роуту относится запрос, вызывается экшн нужного контроллера или коллбэк роута.
Фильтры after в роутах. Если у вас есть фильтры after в роутах, они выполняются.
Фильтр after уровня приложения Если у вас есть фильтры, зарегистрированные в App::after(), они выполняются.
Стек middleware разворачивается вверх Это точка, где объект Response передается вверх по стеку middlewares. Каждый middleware может изменять этот объект.
Middleware shutdown. Если у вас есть middleware, которые реализуют TerminableInterface, вызывается метод shutdown() этих middleware.
Коллбэки finish Если у вас есть функции, зарегистрированные в App::finish(), они выполняются.

Все запросы пользователей обрабатываются сервером и ведут на public/index.php файл.
У такого подхода есть название — паттерн FrontController.
Далее в index.php мы загружаем vendor/autoload.php . Это Composer автолоад файл, в котором будут подгружаться зависимости в вашем приложении по мере необходимости.
Файл bootstrap/app.php — это один из самых важных файлов Laravel. Он создает и настраивает экземпляр приложения.
Отвечает за:
Service Providers — это фундамент Laravel. Без них фреймворк вообще не поднимется.
Они отвечают за
boot() выполняются действия, которые должны произойти после того, как все провайдеры зарегистрированы.config/app.php, можно гибко управлять функционалом.Все провайдеры регистрируются в массиве providers внутри config/app.php
Провайдеры регистрируются непосредственно на этапе bootstrap непосредственно перед отправкой запроса в middleware pipeline (конвеер выполнения middleware).

А внутри $app->boot(); и происходит запуск ServiceProviders.
Routing — это механизм, который определяет, какой код (Контроллер) должен выполниться при обращении к конкретному URL.
|
1
|
Route::get('/users', [UserController::class, 'index']); |
В Laravel маршруты определяются в файлах:
routes/web.php — для веб-страниц (Blade, сессии, cookies).routes/api.php — для API (stateless, JSON).routes/console.php — для Artisan-команд. Не используются при HTTP запросах.routes/channels.php — для Broadcasting-каналов (WebSocket). Используется при работе с real-time приложениями.В Laravel middleware — это классы или методы, которые обрабатывают HTTP-запрос перед/после выполнением контроллера.
Здесь запускается цепочка middleware vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:175

После того как был определен route, и выполнены middleware, Laravel приложение выполняет Controller. В нем находится бизнес логика, обработка request, отправка данных во View.
Когда контроллер отработал, он возвращает response. Этот response может быть разным:
После того как контроллер вернул ответ, он снова проходит через цепочку middleware которые должны выполниться после Controller.
И ответ возвращается пользователю.
В заключение, эта статья об жизненный цикл запроса в laravel подчеркивает важность того что вы тут, расширяете ваше сознание, знания, навыки и умения. Надеюсь, что теперь ты понял что такое жизненный цикл запроса в laravel и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Фреймворки. Famworks ( программная платформа)
Комментарии