Files
XC_VM/docs/ru/development/exception-hierarchy.md
T
Divarion_D dbf535bcc5 docs(translate): robust {N} sentinels + possessive handling; regenerate ru
Fix Markdown-mangling artifacts the free web engine (yandex) produced in the
committed docs/ru, and regenerate the whole tree cleanly (0 fallbacks):

- Sentinel format @@N@@ -> {N}. MT engines are trained to preserve curly
  format-string placeholders, so {N} survives code-heavy lines where @@N@@ (and
  ZZZ…ZZZ, which also duplicated its Z) were split/moved — e.g. the stray
  "@0@@" in the FAQ and "load balancerZ" in the README are gone.
- Possessive: a trailing English `'s` is consumed INTO the masked span and
  dropped on restore. Every sentinel format breaks when a bare `'s` sits right
  after it, and Russian has no possessive `'s`.
- Validate + retry: after restore, any leftover brace fragment triggers a retry
  (the engine is non-deterministic); after a few failures the line stays English
  so a broken token is never emitted.
- Glossary += KeyDB, yt-dlp, Ubuntu, iptables, MAGSCAN.

Regenerated docs/ru (37 files, translators/yandex): no residual sentinels,
mkdocs build --strict clean.
2026-08-21 16:31:01 +03:00

3.6 KiB

Иерархия исключений

Все исключения XC_VM расширяют диапазон XcVmException, так что вызывающие абоненты могут перехватывать все дерево с помощью один catch блокирует или нацелен на определенную подсистему.


Дерево

\Exception
└── XcVmException
    ├── Container
    │   └── ContainerException          (PSR-11 ContainerExceptionInterface)
    │       ├── CircularDependencyException
    │       ├── ServiceCreationException
    │       └── NotFoundException       (PSR-11 NotFoundExceptionInterface)
    └── Module
        └── ModuleException
            ├── ModuleNotFoundException
            ├── ModuleLoadException
            ├── ModuleManifestException
            └── ModuleCycleException

Исключения для контейнеров

Класс Когда его бросают
ContainerException База данных обо всех неисправностях контейнеров
CircularDependencyException Заводской график службы содержит цикл
ServiceCreationException Заводской вызов был произведен при создании сервиса
NotFoundException get($id) запрос на незарегистрированную услугу

NotFoundException реализует оба интерфейса PSR-11, поэтому контейнер совместим:

try {
    $service = $container->get('unknown');
} catch (NotFoundException $e) {
    // PSR-11 NotFoundExceptionInterface
}

Исключения из модулей

Класс Когда его бросают
ModuleException База данных для всех отказов модулей
ModuleNotFoundException Отсутствует необходимый модуль зависимостей
ModuleLoadException Файл модуля не может быть загружен или класс не найден
ModuleManifestException module.json отсутствует, неправильно сформирован или не прошел проверку
ModuleCycleException Граф зависимостей имеет цикл

Перехват по подсистемам

// Catch any XC_VM exception
try {
    $loader->loadAll();
} catch (XcVmException $e) {
    logger()->error($e->getMessage());
}

// Catch only module-related failures
try {
    $loader->loadAll();
} catch (ModuleException $e) {
    // ModuleNotFoundException | ModuleLoadException | ...
}

// Catch container-specific failures
try {
    $container->get('missing');
} catch (ContainerException $e) {
    // CircularDependencyException | NotFoundException | ...
}

Местоположение

src/Core/Exception/
├── XcVmException.php
├── Container/
│   ├── ContainerException.php
│   ├── CircularDependencyException.php
│   ├── ServiceCreationException.php
│   └── NotFoundException.php
└── Module/
    ├── ModuleException.php
    ├── ModuleNotFoundException.php
    ├── ModuleLoadException.php
    ├── ModuleManifestException.php
    └── ModuleCycleException.php

Связанные файлы

Файл Роль
src/Core/Exception/ Базовые классы исключений и иерархия проекта