# Контексты Bootstrap `XC_Bootstrap` — единая точка входа для инициализации системы. Каждый контекст загружает ровно тот набор подсистем, который нужен для конкретного типа запроса. Контекст передаётся как значение enum `BootContext`. --- ## Быстрый справочник | Enum-значение | Где используется | | --------------------- | ---------------------------------------- | | `BootContext::MINIMAL` | Скрипты, которым нужны только пути/конфиг | | `BootContext::CLI` | Cron-задачи, CLI-команды | | `BootContext::STREAM` | Стриминговые эндпоинты (live, vod, ts) | | `BootContext::ADMIN` | Панель администратора / реселлера | --- ## Что загружает каждый контекст ### BootContext::MINIMAL Загружает только базовые константы и конфигурацию. База данных не подключается. **Включает:** - Composer PSR-4 автозагрузчик (`vendor/autoload.php`) - Константы путей (`MAIN_HOME`, `INCLUDES_PATH`, `CONFIG_PATH`, …) - Logger (`Logger::init()`) - Функции ошибок (`generateError()`, `generate404()`) **Не включает:** DB, Redis, сессии, Translator, Admin API. **Пример:** ```php require_once '/home/xc_vm/bootstrap.php'; XC_Bootstrap::boot(BootContext::MINIMAL); // Теперь доступны MAIN_HOME, Logger echo MAIN_HOME; ``` --- ### BootContext::CLI Предназначен для cron-заданий и CLI-команд. Добавляет подключение к БД поверх `MINIMAL`. **Включает** (дополнительно к MINIMAL): - Подключение к базе данных - `LegacyInitializer` (легаси-глобалы для функций из `www/`) - Redis (по умолчанию: `false`; включить через опцию `'redis' => true`) - `cli_set_process_title()` (если передана опция `'process'`) **Пример:** ```php require_once '/home/xc_vm/bootstrap.php'; XC_Bootstrap::boot(BootContext::CLI, [ 'cached' => true, 'process' => 'xc_vm: my-cron-job', ]); ``` --- ### BootContext::STREAM Лёгкий контекст для стриминговых эндпоинтов. Инициализирует только то, что нужно для горячего пути стриминга. **Включает** (дополнительно к MINIMAL): - Подключение к базе данных (`cached: true` — всегда) - Flood-protection и проверка хоста **Не включает:** Redis, Translator, Admin API, сессии. > Это намеренное ограничение. Любой дополнительный код в горячем пути увеличивает задержку стриминга. **Пример:** ```php require_once '/home/xc_vm/bootstrap.php'; XC_Bootstrap::boot(BootContext::STREAM, ['cached' => true]); ``` --- ### BootContext::ADMIN Полная инициализация для панели администратора и реселлера. **Включает** (дополнительно к MINIMAL): - PHP-сессия (с параметром `SameSite=Strict`) - Подключение к базе данных (`cached: false`) - `LegacyInitializer` - Redis - Admin API / Reseller API - Translator (локализация) - Shutdown-обработчик - Статусные константы - Admin globals **Пример:** ```php require_once '/home/xc_vm/bootstrap.php'; XC_Bootstrap::boot(BootContext::ADMIN); ``` --- ## Матрица подсистем | Подсистема | MINIMAL | CLI | STREAM | ADMIN | | ------------------ | :-----: | :-: | :----: | :---: | | Константы / пути | ✅ | ✅ | ✅ | ✅ | | Logger | ✅ | ✅ | ✅ | ✅ | | Flood-protection | — | — | ✅ | ✅ | | Проверка хоста | — | — | ✅ | ✅ | | База данных | — | ✅ | ✅ | ✅ | | LegacyInitializer | — | ✅ | — | ✅ | | Redis | — | opt | — | ✅ | | PHP-сессия | — | — | — | ✅ | | Admin API | — | — | — | ✅ | | Translator | — | — | — | ✅ | --- ## Опции `boot()` ```php XC_Bootstrap::boot(BootContext $context, array $options = []); ``` | Опция | Тип | Умолчание | Описание | | ------------ | ---------- | ---------------------------- | ------------------------------------- | | `cached` | `bool` | `true` (STREAM), `false` (остальные) | Загружать настройки из кеша | | `redis` | `bool` | `true` (ADMIN), `false` (остальные) | Подключать Redis | | `process` | `string` | `''` | Имя процесса для `cli_set_process_title()` | | `shutdown` | `callable` | встроенный | Замена стандартного shutdown-обработчика | --- ## Идемпотентность `boot()` выполняется **один раз за процесс** — повторные вызовы игнорируются. ```php XC_Bootstrap::boot(BootContext::ADMIN); XC_Bootstrap::boot(BootContext::CLI); // проигнорировано ``` Для сброса состояния (только в тестах): ```php XC_Bootstrap::reset(); ``` --- ## Публичные методы ```php XC_Bootstrap::getContext(): ?BootContext // текущий контекст XC_Bootstrap::isBooted(): bool // выполнен ли boot() XC_Bootstrap::isCli(): bool // работает ли в CLI XC_Bootstrap::getDatabase(): ?Database XC_Bootstrap::getContainer(): ServiceContainer ``` ## Связанные файлы | Файл | Роль | | --- | --- | | `src/bootstrap.php` | Определяет MAIN_HOME, подключает автозагрузчик Composer, бутит контекст | | `src/Core/Enum/BootContext.php` | Enum контекста загрузки | | `src/Core/Init/LegacyInitializer.php` | Инициализация под каждый контекст |