Перейти к основному содержимому

🔄 Жизненный цикл запроса

Каждый запрос начинается в index.php

  1. Определение констант (ROOT, APP, CONFIG)
  2. Загрузка вспомогательных функций
  3. Проверка установки (существует ли config/database.php?)
  4. Если не установлен → перенаправление на /install/
  5. Загрузка конфигурации БД + хелперов, запуск сессии
  6. Вычисление пути запроса (обработка установки в подкаталогах)
  7. Диспетчеризация через app/router.php

Маршрутизатор

app/router.php — это плоская таблица диспетчеризации с сопоставлением шаблонов. Шаблоны компилируются в регулярные выражения и сопоставляются с путём запроса. Группы захвата передаются как аргументы метода контроллера.


Аутентификация

Большинство контроллеров вызывают require_auth(), который перенаправляет неаутентифицированных пользователей на /login. Эндпоинты только для администраторов используют require_admin(), возвращающий JSON 403.

Сессии заполняются при входе значениями user_id, workspace_id, role и пересоздаются для предотвращения фиксации сессии.


Подключение к базе данных

PDO-подключение создаётся лениво при первом запросе (синглтон). Используется ERRMODE_EXCEPTION и настоящие подготовленные выражения (EMULATE_PREPARES = false).


Форматы ответов

  • HTML-страницы: Контроллер устанавливает $page и подключает layout.php
  • JSON API: json_response() устанавливает Content-Type, выводит JSON, завершает выполнение
  • Поток SSE: Постоянный цикл с text/event-stream, ping каждые 2 с, завершение через 55 с