К содержанию
Medusa
Документация

Жизненный цикл запроса

Точкой входа для всех HTTP-запросов служит файл www/medusa/index.php. Веб-сервер перенаправляет в него каждый запрос, который не совпал с существующим файлом, директорией или симлинком.

Порядок обработки запроса

  1. Подключаются глобальные константы из www/medusa/constants.php.
  2. Подключаются базовые и вспомогательные функции из www/medusa/functions.php.
  3. Загружается Composer-автозагрузчик www/vendor/autoload.php.
  4. Загружаются конфигурационные файлы: www/config/app.php, www/config/database.php, www/config/mail.php, www/config/storage.php и www/config/queue.php.
  5. Инициализируется Dotenv и подключается смонтированный www/.env.
  6. Регистрируется основной автозагрузчик классов Medusa\Start\Loader.
  7. Если включён параметр APP_SET_UTC_TIME_ZONE, для PHP устанавливается часовой пояс UTC.
  8. Вычисляется итоговый флаг автоподключения к базе данных. Базово используется параметр BOOTSTRAP_PDO_AUTOCONNECT, а если заранее определена служебная PHP-константа BOOTSTRAP_OVERRIDE_PDO_AUTOCONNECT, её значение имеет приоритет. Если итоговый флаг включён, создаётся подключение к базе данных через Medusa\DataBase\PDO.
  9. Если подключение к базе данных создано, для него задаётся DB_WAIT_TIMEOUT (таймаут ожидания неактивного соединения).
  10. Если подключение к базе данных создано и включён параметр DB_SET_UTC_TIME_ZONE, для базы данных устанавливается часовой пояс UTC.
  11. Вычисляется итоговый флаг автоподключения к Redis-серверу. Базово используется параметр BOOTSTRAP_REDIS_AUTOCONNECT, а если заранее определена служебная PHP-константа BOOTSTRAP_OVERRIDE_REDIS_AUTOCONNECT, её значение имеет приоритет. Если итоговый флаг включён, создаётся подключение к Redis-серверу через Medusa\Storage\Redis.
  12. Вычисляется итоговый флаг автоподключения к RabbitMQ-серверу. Базово используется параметр BOOTSTRAP_RMQ_AUTOCONNECT, а если заранее определена служебная PHP-константа BOOTSTRAP_OVERRIDE_RMQ_AUTOCONNECT, её значение имеет приоритет. Если итоговый флаг включён, создаётся подключение к RabbitMQ-серверу через Medusa\Queue\RabbitMQ.
  13. Подключается пользовательский bootstrap-файл www/init.php.
  14. Инициализируется Medusa\Lang\Loc для подключения файлов локализации.
  15. Для HTTP-запросов инициализируется Medusa\Http\Session.
  16. Для HTTP-запросов инициализируется Medusa\Http\Route на основе Medusa\Http\Server и Medusa\Http\Request.
  17. Для HTTP-запросов инициализируется frontend-слой: выполняется чтение файла www/config/frontend.json, для каждого пути из src[].path вызываются Medusa\Frontend\TwigView::addSrcPath(Path $srcPath) и Medusa\Frontend\ViteEntry::addSrcPath(Path $srcPath), а путь out.path передаётся в Medusa\Frontend\ViteEntry::setOutPath(Path $outPath).
  18. Подключается файл www/medusa/routes.php, который далее подключает www/routes/api.php и www/routes/web.php.
  19. После регистрации маршрутов фреймворк определяет, относится ли текущий путь к Web- или API-слою, и при необходимости завершает запрос встроенным ответом 404 или 405.
  20. Любое неперехваченное исключение на этапах bootstrap, инициализации запроса, регистрации маршрутов или выполнения обработчика логируется через write_log_throwable().
  21. После логирования неперехваченная ошибка превращается в централизованный ответ: по умолчанию используются код и текст исходного исключения. Если код не входит в диапазон от 400 до 599, возвращается fallback 500 Internal Server Error. Если текст ошибки пустой, он заменяется на Unknown Error. Формат ответа: HTML-страница для Web-маршрута или JSON-ответ для API-маршрута.