Жизненный цикл запроса
Точкой входа для всех HTTP-запросов служит файл www/medusa/index.php. Веб-сервер перенаправляет в него
каждый запрос, который не совпал с существующим файлом, директорией или симлинком.
Порядок обработки запроса
- Подключаются глобальные константы из
www/medusa/constants.php. - Подключаются базовые и вспомогательные функции из
www/medusa/functions.php. - Загружается Composer-автозагрузчик
www/vendor/autoload.php. -
Загружаются конфигурационные файлы:
www/config/app.php,www/config/database.php,www/config/mail.php,www/config/storage.phpиwww/config/queue.php. -
Инициализируется
Dotenvи подключается смонтированныйwww/.env. - Регистрируется основной автозагрузчик классов
Medusa\Start\Loader. -
Если включён параметр
APP_SET_UTC_TIME_ZONE, для PHP устанавливается часовой поясUTC. -
Вычисляется итоговый флаг автоподключения к базе данных. Базово используется параметр
BOOTSTRAP_PDO_AUTOCONNECT, а если заранее определена служебная PHP-константаBOOTSTRAP_OVERRIDE_PDO_AUTOCONNECT, её значение имеет приоритет. Если итоговый флаг включён, создаётся подключение к базе данных черезMedusa\DataBase\PDO. -
Если подключение к базе данных создано, для него задаётся
DB_WAIT_TIMEOUT(таймаут ожидания неактивного соединения). -
Если подключение к базе данных создано и включён параметр
DB_SET_UTC_TIME_ZONE, для базы данных устанавливается часовой поясUTC. -
Вычисляется итоговый флаг автоподключения к Redis-серверу. Базово используется параметр
BOOTSTRAP_REDIS_AUTOCONNECT, а если заранее определена служебная PHP-константаBOOTSTRAP_OVERRIDE_REDIS_AUTOCONNECT, её значение имеет приоритет. Если итоговый флаг включён, создаётся подключение к Redis-серверу черезMedusa\Storage\Redis. -
Вычисляется итоговый флаг автоподключения к RabbitMQ-серверу. Базово используется параметр
BOOTSTRAP_RMQ_AUTOCONNECT, а если заранее определена служебная PHP-константаBOOTSTRAP_OVERRIDE_RMQ_AUTOCONNECT, её значение имеет приоритет. Если итоговый флаг включён, создаётся подключение к RabbitMQ-серверу черезMedusa\Queue\RabbitMQ. - Подключается пользовательский bootstrap-файл
www/init.php. - Инициализируется
Medusa\Lang\Locдля подключения файлов локализации. - Для HTTP-запросов инициализируется
Medusa\Http\Session. -
Для HTTP-запросов инициализируется
Medusa\Http\Routeна основеMedusa\Http\ServerиMedusa\Http\Request. -
Для 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). -
Подключается файл
www/medusa/routes.php, который далее подключаетwww/routes/api.phpиwww/routes/web.php. -
После регистрации маршрутов фреймворк определяет, относится ли текущий путь к Web- или API-слою, и при необходимости
завершает запрос встроенным ответом
404или405. -
Любое неперехваченное исключение на этапах bootstrap, инициализации запроса, регистрации маршрутов или выполнения
обработчика логируется через
write_log_throwable(). -
После логирования неперехваченная ошибка превращается в централизованный ответ: по умолчанию используются код и
текст исходного исключения. Если код не входит в диапазон от
400до599, возвращается fallback500 Internal Server Error. Если текст ошибки пустой, он заменяется наUnknown Error. Формат ответа: HTML-страница для Web-маршрута или JSON-ответ для API-маршрута.