Может войдёшь?
Черновики Написать статью Профиль

Жизненный цикл запроса в деталях

перевод

  1. 1. Стандартный жизненный цикл
  2. 2. Копнем глубже
    1. 2.1. Загрузка (Loading)
    2. 2.2. Инициализация (Booting)
    3. 2.3. Выполнение (Running)

Стандартный жизненный цикл

/packages/proger/habravel/uploads/53-lifecycle.jpg

Стандартный жизненный цикл состоит из следующих пунктов:

  1. HTTP-запрос через Роуты (Routes) поступает в Контроллер (Controller)
  2. Контроллер осуществляет некоторые действия в зависимости от запроса и передает данные в Отображения (Views)
  3. Отображения отображают полученные данные заданным образом, обеспечивая HTTP-ответ.

Есть много отклонений и различных вариантов вышеприведенной схемы, но она дает нам три опорные точки, на которые надо обратить внимание:

  1. Роуты — app/routes.php
  2. Контроллеры — app/controllers/
  3. Отображения — app/views/

«Отклонения» могут быть, например, такими:

  1. Роуты могут возвращать Отображения или сам Ответ (объект Response), без задействования Контроллеров.
  2. До или после Роутов могут срабатывать Фильтры (app/filters.php)
  3. В процесс могут вмешаться Исключения (Exceptions) или ошибки приложения.
  4. Отклики на события.

Копнем глубже

Более глубокое понимание жизненного цикла запроса в Laravel позволит вам понять, где именно можно (и стоит) писать ваш код.

Цикл запроса можно разбить на три части: Загрузка (Loading), Инициализация (Booting) и Выполнение (Running).

Загрузка (Loading)

/packages/proger/habravel/uploads/53-bootstrap1.jpg

Вот три основные области, где ваше приложение может повлиять на процесс загрузки фреймворка:

  1. Пакеты Workbench. Workbench — это способ организовывать свой код в обособленные пакеты и тестировать их внутри вашего приложения перед тем как сделать их пакетами, распространяемыми через Composer. См. документацию.
  2. Среда выполнения. В зависимости от установки среды, будут загружены те или иные конфиги, те или иные старт-файлы.
  3. Пути. Редактируя bootstrap/paths.php вы можете изменить файловую структуру фреймворка, расположив файлы в удобных для вас местах.

Инициализация (Booting)

/packages/proger/habravel/uploads/53-bootstrap2.jpg

Есть 10 областей, где вы можете влиять на процесс инициализации фреймворка.

Файлы настроек
Файлы настроек влияют и на процесс инициализации и на процесс работы фреймворка.
Сервис-провайдеры (Service Providers)
Любые сервис-провайдеры, которые вы создали или подсоединили к своему приложению в конфиге config/app.php загружаются в начале процесса инициализации. Если сервис-провайдер не отложенный, вызывается его метод PHPregister().
Загрузка и применение старт-файлов
Регистрируются старт-файлы, которые надо загрузить, когда будет вызвано событие booted.
Стэк middleware разворачивается вниз
Middleware вложены один в другой как матрешки. Верхний middeware обрабатывает запрос и вызывает middleware следующего уровня, и так далее. Последний middleware вызывает приложение. Все middlewares заносятся в стек, и будут вызваны снова в конце части Выполнения (Running).
Инициализация сервис-провайдеров
Вызывается метод PHPboot() у всех зарегистрированных не-отложенных сервис-провайдеров.
Функции обратного вызова пре-инициализации
Вызываются все функции-замыкания, зарегистрированные в PHPApp::booting()
Функции обратного вызова пост-инициализации
Вызываются все функции-замыкания, зарегистрированные в PHPApp::booted(). Загружаются старт-файлы, зарегистрированные на шаге 3.
Глобальные старт-файлы
Первым делом это app/start/global.php, затем, если исполняется artisan-команда, то app/start/artisan.php.
Старт-файл среды выполнения
Исполняется файл, который имеет то же имя файла, что и название среды выполнения — app/start/{environment}.php
Маршруты
Исполняется app/routes.php. Этот файл вы будете редактировать наиболее часто в процессе разработки вашего приложения.

Выполнение (Running)

/packages/proger/habravel/uploads/53-bootstrap3.jpg

10 областей, где вы можете влиять на процесс выполнения:

Режим обслуживания
Если вы зарегистрировали функцию-подписчик режима обслуживания и приложение находится в этом режиме, эта функция выполняется.
Фильтр before уровня приложения
Если у вас есть фильтры, зарегистрированные в PHPApp::before(), они выполняются.
Фильтры before в маршрутах
Если у вас есть фильтры before в маршрутах, они выполняются.
Исполнение запроса
После разбора, к какому маршруту относится запрос, вызывается действие (метод) нужного контроллера или замыкание маршрута.
Фильтры after в маршрутах
Если у вас есть фильтры after в маршрутах, они выполняются.
Фильтр after уровня приложения
Если у вас есть фильтры, зарегистрированные в PHPApp::after(), они выполняются.
Стек middleware разворачивается вверх
Это точка, где объект Response передается вверх по стеку middlewares. Каждый middleware может изменять этот объект.
Middleware shutdown
Если у вас есть middleware, которые реализуют PHPTerminableInterface, вызывается метод PHPshutdown() этих middleware.
Функции обратного вызова finish
Если у вас есть функции, зарегистрированные в PHPApp::finish(), они выполняются.
Функции обратного вызова shutdown
Если у вас есть функции, зарегистрированные в PHPApp::shutdown(), они выполняются.

Как вы считаете, полезен ли этот материал? Да Нет

Комментарии (1)

Ananas

Спасибо, теперь стало вообще не понятно)

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.