пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Жизненный цикл запроса фрэймворка Laravel

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

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

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

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

  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)

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

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

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

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

Файлы настроек

Файлы настроек влияют и на процесс инициализации и на процесс работы фреймворка.

Сервис-провайдеры (Service Providers)

Любые сервис-провайдеры, которые вы создали или подсоединили к своему приложению в конфиге config/app.php загружаются в начале процесса инициализации. Если сервис-провайдер не отложенный, вызывается его метод register().

Загрузка и применение старт-файлов

Регистрируются старт-файлы, которые надо загрузить, когда будет вызвано событие booted.

Стэк middleware разворачивается вниз

Middleware вложены один в другой как матрешки. Верхний middeware обрабатывает запрос и вызывает middleware следующего уровня, и так далее. Последний middleware вызывает приложение. Все middlewares заносятся в стек, и будут вызваны снова в конце части Выполнения (Running).

Инициализация сервис-провайдеров

Вызывается метод boot() у всех зарегистрированных не-отложенных сервис-провайдеров.

Функции обратного вызова пре-инициализации

Вызываются все функции-замыкания, зарегистрированные в App::booting()

Функции обратного вызова пост-инициализации

Вызываются все функции-замыкания, зарегистрированные в App::booted(). Загружаются старт-файлы, зарегистрированные на шаге 3.

Глобальные старт-файлы

Первым делом это app/start/global.php, затем, если исполняется artisan-команда, то app/start/artisan.php.

Старт-файл среды выполнения

Исполняется файл, который имеет то же имя файла, что и название среды выполнения — app/start/{environment}.php

Маршруты

Исполняется app/routes.php. Этот файл вы будете редактировать наиболее часто в процессе разработки вашего приложения.

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

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

Режим обслуживания

Если вы зарегистрировали функцию-подписчик режима обслуживания и приложение находится в этом режиме, эта функция выполняется.

Фильтр before уровня приложения

Если у вас есть фильтры, зарегистрированные в App::before(), они выполняются.

Фильтры before в маршрутах

Если у вас есть фильтры before в маршрутах, они выполняются.

Исполнение запроса

После разбора, к какому маршруту относится запрос, вызывается действие (метод) нужного контроллера или замыкание маршрута.

Фильтры after в маршрутах

Если у вас есть фильтры after в маршрутах, они выполняются.

Фильтр after уровня приложения

Если у вас есть фильтры, зарегистрированные в App::after(), они выполняются.

Стек middleware разворачивается вверх

Это точка, где объект Response передается вверх по стеку middlewares. Каждый middleware может изменять этот объект.

Middleware shutdown

Если у вас есть middleware, которые реализуют TerminableInterface, вызывается метод shutdown() этих middleware.

Функции обратного вызова finish

Если у вас есть функции, зарегистрированные в App::finish(), они выполняются.

Функции обратного вызова shutdown

Если у вас есть функции, зарегистрированные в App::shutdown(), они выполняются.

 


22.06.2017; 16:59
хиты: 141
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь