Skip to main content

Cómo agregar una ruta/pantalla nueva (paso a paso)

Objetivo
 Crear una pantalla nueva siguiendo el patrón actual del proyecto: ruta en routes.php → archivo en pages/ → (opcional) controller en controllers/ → render con templates/ .

1) Definir la URL en routes.php
Las rutas se declaran con get/post/any . La mayoría de pantallas usan any() para soportar GET/POST y añaden el validator validatePost (CSRF/session).

Ejemplos existentes:

- Rutas “pantallas”:
  - routes.php
- Rutas con parámetros:
  - routes.php
Regla práctica

- Si la pantalla recibe formularios o acciones (POST), usa:
  - any('/mi_ruta', 'carpeta/mi_pantalla.php', ['validatePost']);
- Si es solo lectura (GET), puedes usar get() .

2) Crear el archivo en pages/...
El router siempre busca dentro de pages/ (lo antepone automáticamente al incluir):

- router.php
Ejemplo típico de página:

- Llama validateLogin() al inicio si requiere sesión:
  - dashboard.php
- Instancia controllers y carga data
- Renderiza templates:
  - header / footer

3) (Opcional) Crear o reutilizar un controller en controllers/
Los controllers normalmente heredan de Controller (base CRUD) y definen $table .

- Base CRUD:
  - Controller
- Ejemplo real:
  - UserController
Regla práctica

- Si vas a consultar/insertar/actualizar una tabla concreta, crea un controller con public $table = "tabla"; y aprovecha get/insert/update/delete .
- Si el módulo ya existe, busca primero su controller correspondiente ( clientController.php , projectsController.php , etc.).

4) (Opcional) Proteger por permisos
En routes.php muchas rutas están envueltas en:

- if ($GLOBALS['permissions']->validatePermission($_SESSION['current_user'], "X.view")) { ... }
Ejemplo:

- routes.php
Esto implica:

- Debe existir el permiso en BD (tabla permissions/menus) para ese rol.
- Si no existe, el dev verá que “no aparece la ruta” (no se registra) o recibirá “No autorizado” según el flujo.

5) Validar CSRF si usas POST
La app genera y valida un token CSRF en validatePost() :

- validatePost + CSRF
- is_csrf_valid
Regla práctica:

- Si tu pantalla tiene formularios POST, registra la ruta con ['validatePost'] y asegúrate de incluir el csrf en el form, siguiendo el patrón del proyecto.

6) Checklist final (cuando agregas una pantalla)
- Ruta definida en routes.php
- Archivo existe en pages/<...>.php
- Si requiere sesión, llama validateLogin()
- Si hay POST, usa validatePost y CSRF
- Si aplica, permiso configurado para que se registre/sea accesible