Files
XC_VM/docs/ru/development/bootstrap-contexts.md
T
Divarion-D f4555e7943 docs: reorganize structure, sync with current code, add missing framework reference
Structure:
- Split development/ (20 files) into development/ (framework reference) and guides/ (how-to)
- Moved 13 how-to files into new guides/ category (auth, cli, error-handling, etc.)
- Moved navbar-rendering.md from system/ into development/
- Deleted empty system/README.md files
- Deleted documentation_gaps.md (all gaps resolved) and redundant info/update.md

Sidebar / navbar:
- Removed all emojis from _sidebar.md (EN + RU) — fixes tree hierarchy rendering
- Removed flag emojis from _navbar.md language switcher
- Removed duplicate entries from the old "System Documentation" section
- Renamed section headers: "Development" -> "Framework Reference" + "Developer Guides"

Content fixes (modules.md EN + RU):
- Updated "Class naming" section: now documents XcVm\Module\{Pascal} namespaces
  (was "global PHP namespace — Until PHP namespaces are introduced")
- Updated main module class example to use namespace declaration + use statements
- Updated class naming in ModuleLoader description to FQN
- Replaced installCrontab() manual crontab instruction with getCronEntries() API
- Updated enable/disable section: added ModuleState enum table, updated config examples
- Fixed FAQ answer for disabling a module

Content fixes (bootstrap-contexts.md EN + RU):
- Replaced CONTEXT_* string constants with BootContext enum cases throughout
- Updated boot() signature: string $context -> BootContext $context
- Updated getContext() return type: ?string -> ?BootContext

New framework reference docs (EN + RU):
- docs/{en,ru}/development/event-system.md: EventDispatcher singleton bridge,
  #[ListensTo] attribute, getEventSubscribers() array API, stoppable events,
  built-in event catalog, custom event authoring, ListensTo attribute reference
- docs/{en,ru}/development/exception-hierarchy.md: full XcVmException tree,
  container vs module subtrees, PSR-11 compliance notes, catch-by-subsystem examples
2026-06-15 18:27:23 +03:00

6.2 KiB

Контексты Bootstrap

XC_Bootstrap — единая точка входа для инициализации системы. Каждый контекст загружает ровно тот набор подсистем, который нужен для конкретного типа запроса. Контекст передаётся как значение enum BootContext.


Быстрый справочник

Enum-значение Где используется
BootContext::MINIMAL Скрипты, которым нужны только пути/конфиг
BootContext::CLI Cron-задачи, CLI-команды
BootContext::STREAM Стриминговые эндпоинты (live, vod, ts)
BootContext::ADMIN Панель администратора / реселлера

Что загружает каждый контекст

BootContext::MINIMAL

Загружает только базовые константы и конфигурацию. База данных не подключается.

Включает:

  • Автозагрузчик классов (autoload.php)
  • Константы путей (MAIN_HOME, INCLUDES_PATH, CONFIG_PATH, …)
  • Logger (Logger::init())
  • Функции ошибок (generateError(), generate404())

Не включает: DB, Redis, сессии, Translator, Admin API.

Пример:

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')

Пример:

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, сессии.

Это намеренное ограничение. Любой дополнительный код в горячем пути увеличивает задержку стриминга.

Пример:

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

Пример:

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()

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() выполняется один раз за процесс — повторные вызовы игнорируются.

XC_Bootstrap::boot(BootContext::ADMIN);
XC_Bootstrap::boot(BootContext::CLI); // проигнорировано

Для сброса состояния (только в тестах):

XC_Bootstrap::reset();

Публичные методы

XC_Bootstrap::getContext(): ?BootContext  // текущий контекст
XC_Bootstrap::isBooted(): bool            // выполнен ли boot()
XC_Bootstrap::isCli(): bool               // работает ли в CLI
XC_Bootstrap::getDatabase(): ?Database
XC_Bootstrap::getContainer(): ServiceContainer