Saltar al contenido principal

🔄 Ciclo de Vida de la Solicitud

Toda Solicitud Comienza en index.php

  1. Definir constantes (ROOT, APP, CONFIG)
  2. Cargar funciones helper
  3. Verificar si está instalado (¿existe config/database.php?)
  4. Si no está instalado → redirigir a /install/
  5. Cargar configuración de BD + helpers, iniciar sesión
  6. Calcular la ruta de la solicitud (maneja instalaciones en subdirectorios)
  7. 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 $page e incluye layout.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