# Ядро и жизненный цикл запроса Как запрос проходит через движок: от `index.php` до ответа. Здесь — базовые кирпичи, на которых стоят и публичный сайт, и панель управления. Её каталог по умолчанию называется `/adminx`, но может быть переименован. --- ## Жизненный цикл (упрощённо) ``` index.php / adminx/index.php │ ▼ system/bootstrap.php → App::init() // автозагрузчик, БД, сессия, настройки, Twig, хуки │ ▼ Router::match() // найти маршрут по пути и методу │ ▼ handler (Controller::method / Closure) // выполнить обработчик, получить строку/JSON │ ▼ Response // отдать HTML/JSON + статус ``` В админке точка входа `adminx/index.php` дополнительно поднимает модули (`ModuleManager`) и маршрутизацию через `Dispatcher`. --- ## Карта раздела | Страница | О чём | | --- | --- | | [Инициализация (bootstrap)](bootstrap.md) | Что поднимает `App::init()`: автозагрузка, БД, сессия, настройки, Twig, хуки. | | [Маршрутизация (Router)](routing.md) | `get/post/put/delete`, параметры `{id}`, группы, `_method`. | | [Контроллеры](controllers.md) | Базовый `App\Common\Controller`: `render / json / success / error / csrfGuard`. | | [Авторизация (Auth)](auth.md) | Пользователь админки и посетитель сайта: `check / user / id / attempt`. | | [Сессии и CSRF](sessions-csrf.md) | `Session`: хранение, токен CSRF, проверка форм и AJAX. | | [Права (Permission)](permissions.md) | Проверка разрешений, роли, регистрация прав модулями. | --- ## Два контекста Движок обслуживает **два независимых контекста** в одной кодовой базе: | | Публичный сайт | Админка `/adminx` | | --- | --- | --- | | Вход | `index.php` | `adminx/index.php` | | Пользователь | `Auth::publicUser()` (посетитель) | `Auth::user()` / `systemUser()` (админ) | | Права | — | `Permission::check()` | | Модули | публичные модули | модули панели (`ModuleManager`) | Сессия и CSRF-механика — общие (одна DB-сессия и cookie), что сохраняет вход при переходах между сайтом и панелью. Расширения регистрируют namespaces и runtime-вклады декларативно через [descriptor модуля](../modules/module-php.md); ручное изменение загрузчика для обычного модуля не требуется.