Skip to main content

Flujo de una request (Apache → routes.php → router → pages → templates)

Objetivo
 Entender el recorrido completo de una petición HTTP para saber dónde depurar y dónde implementar cambios (rutas, auth, DB, UI).

1) Entrada: Apache + .htaccess
El proyecto usa front controller con rewrite: casi todas las URLs terminan ejecutando routes.php .

- Regla principal:
  - .htaccess
Qué hace:

- Deja pasar archivos estáticos (png, css, js, etc.)
- Reescribe el resto hacia routes.php manteniendo querystring

2) Tabla de rutas: routes.php
routes.php carga el router y registra rutas tipo:

- get('/login', 'user/login.php')
- any('/clients', 'client/clients.php', ['validatePost'])
Referencia general:

- routes.php
Puntos importantes:

- Muchas rutas se habilitan según permisos con validatePermission(...) .
- Los paths reales se resuelven contra pages/ (lo hace el router).

3) Bootstrap: system/router.php
Este archivo es el núcleo del request. En cada llamada:

- Inicia sesión ( session_start )
- Carga Composer autoload (vendor)
- Carga .env (dotenv)
- Inicializa templates (League Plates)
- Crea conexión DB ( $GLOBALS['db'] )
- Define middleware helpers como validateLogin() y validatePost()
Referencia:

- router.php

4) Resolución de ruta: route() y any/get/post
Las funciones get/post/any llaman a route($route, $path_to_include, $validators) .

Lo clave:

- Convierte el path a pages/<archivo>.php
- Compara la URL solicitada con el patrón (incluye parámetros tipo $id )
- Si matchea:
  - Ejecuta validators (ej. validatePost )
  - Incluye el archivo final con include_once
Referencia (sección de matching e include):

- router.php

5) La “pantalla” final: archivo en pages/...
Ejemplo típico: pages/dashboard.php (la home).

Patrón común en páginas:

- Llaman validateLogin() si requieren sesión
- Instancian controllers para traer data
- Renderizan templates ( header , footer , etc.)
Ejemplo:

- dashboard.php

6) Render de UI: templates/...
La UI se renderiza con League\Plates\Engine creado en router:

- Inicialización:
  - router.php
Luego las páginas llaman, por ejemplo:

- $GLOBALS['TEMPLATE']->render('header')
- $GLOBALS['TEMPLATE']->render('footer', ...)
Templates principales:

7) Dónde depurar según el síntoma
- 404 / rutas no responden : .htaccess y routes.php
- Redirecciones raras : APP_URL en .env + validateLogin()
  - validateLogin
- Error DB : bloque de conexión en router
  - DB init
- Pantalla carga pero data mal : controller correspondiente en controllers/
- UI rota : templates + assets en lib/