🔄 Ciclo de Vida de la Solicitud
Toda Solicitud Comienza en index.php
- Definir constantes (
ROOT,APP,CONFIG) - Cargar funciones helper
- Verificar si está instalado (¿existe
config/database.php?) - Si no está instalado → redirigir a
/install/ - Cargar configuración de BD + helpers, iniciar sesión
- Calcular la ruta de la solicitud (maneja instalaciones en subdirectorios)
- Despachar vía
app/router.php
El Router
app/router.php es una tabla de despacho plana con coincidencia de patrones. Los patrones se compilan a regex y se comparan con la ruta de la solicitud. Los grupos de captura se pasan como argumentos del método del controlador.
Autenticación
La mayoría de los controladores llaman a require_auth() que redirige a usuarios no autenticados a /login. Los endpoints solo para administradores usan require_admin() que devuelve JSON 403.
Las sesiones se populan en el login con user_id, workspace_id, role, y se regeneran para prevenir fijación de sesión.
Conexión a Base de Datos
La conexión PDO se crea de forma lazy en la primera consulta (singleton). Usa ERRMODE_EXCEPTION y sentencias preparadas reales (EMULATE_PREPARES = false).
Formatos de Respuesta
- Páginas HTML: El controlador establece
$pagee incluyelayout.php - APIs JSON:
json_response()establece Content-Type, imprime JSON, termina - Stream SSE: Bucle persistente con
text/event-stream, ping cada 2s, termina después de 55s