El panel de administración sigue una arquitectura de tres capas inspirada en el patrón MVC. Los controladores viven enDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/jpbarbatic/webapp/llms.txt
Use this file to discover all available pages before exploring further.
public/ y responden directamente a las peticiones HTTP; la lógica de negocio y acceso a datos se centraliza en includes/; y las vistas se construyen como fragmentos .html.php dentro de html/. La plantilla maestra html/plantilla.html.php actúa de pegamento: combina navegación, mensajes flash y el fragmento de contenido específico de cada página en un único documento HTML coherente.
Ciclo de vida de una petición
Cada petición que llega al servidor recorre el siguiente camino, desde Apache hasta el HTML que ve el usuario:Apache recibe la petición y aplica mod_rewrite
El fichero
public/.htaccess intercepta la URL antes de que PHP entre en juego. Las reglas de mod_rewrite traducen rutas limpias como /productos/42 o /productos/nuevo a sus controladores PHP correspondientes (productos/editar.php?id=42 y productos/nuevo.php). Las URLs que no coinciden con ninguna regla se resuelven directamente como ficheros.PHP ejecuta el controlador del módulo
El controlador correspondiente en
public/<modulo>/ (por ejemplo public/productos/index.php) toma el control. Es el único fichero con lógica de negocio específica del módulo: consultas SQL, procesado de formularios y preparación de variables para la vista.El controlador incluye backend.php como guard
La primera línea significativa de cualquier controlador protegido es:Este fichero actúa de portero: inicia la sesión, verifica que el usuario está autenticado, abre la conexión PDO, carga los permisos del rol desde la base de datos y comprueba que el usuario tiene el permiso requerido para esa página concreta. Si cualquier verificación falla, el script termina con una redirección o un
die().El controlador construye los datos y prepara la vista
Con la conexión
$db ya disponible, el controlador ejecuta sus consultas, procesa los datos y asigna las variables que necesita la plantilla: $titulo (texto que aparece en el <title> HTML) y $vista (ruta relativa al directorio html/, sin extensión, como 'productos/listado').plantilla.html.php renderiza el HTML completo
La última línea del controlador llama a la plantilla maestra:La plantilla incluye dinámicamente los fragmentos de la vista indicada por
$vista: el markup principal (.html.php), los estilos específicos (.css.php, si existe) y el JavaScript específico (.script.php, si existe), además de los scripts compartidos y la barra de navegación. Al finalizar, elimina los mensajes flash de la sesión con unset($_SESSION['mensaje']).Las tres capas
includes/
Lógica de backend compartida. Contiene
backend.php (guard de autenticación y permisos), db_pdo.php (wrapper PDO con funciones db_open, db_query, db_insert, db_update, db_delete_by_id, db_filter y la clase DB), permisos.php (consultas RBAC) y utilidades.php (funciones auxiliares de HTML y paginación).html/
Fragmentos de vista. Agrupa la plantilla maestra (
plantilla.html.php), la barra de navegación (nav.html.php), los scripts compartidos (comun.script.php) y los subdirectorios de cada módulo (productos/, categorias/, usuarios/, etc.) con sus fragmentos .html.php, .css.php y .script.php.public/
Controladores y punto de entrada web. Es la única carpeta expuesta al servidor web. Contiene
index.php (raíz de la aplicación), login.php, logout.php, error.php y los subdirectorios de cada módulo con sus controladores específicos (index.php, nuevo.php, editar.php, guardar.php, borrar.php, etc.).El guard pattern (backend.php)
Todos los controladores protegidos del panel comienzan incluyendobackend.php mediante require_once. Este fichero actúa como un guard centralizado que garantiza que ninguna página del panel sea accesible sin autenticación válida ni sin el permiso adecuado. Al devolver $db con return $db, el controlador recibe la conexión PDO lista para usar en la misma línea de require_once.
El código fuente completo del guard es el siguiente:
- Carga de configuración — incluye
config.php(constantes de base de datos y URL),permisos.phpyutilidades.php. - Inicio de sesión —
session_start()reanuda la sesión PHP existente. - Verificación de autenticación — si
$_SESSION['usuario']no existe, redirige aURL_BASE(la página de login) y termina. - Apertura de la conexión PDO —
db_open()crea la conexión con los parámetros definidos enconfig.php. - Carga de permisos —
obtener_permisos_rol()consulta la tablaroles_permisosy actualiza$_SESSION['permisos']con los permisos del rol del usuario. - Verificación de permiso — si el controlador declaró la variable
$permisoantes delrequire_once, comprueba que ese permiso está en la lista del rol. Si no lo está, termina condie('No tienes permiso'). - Retorno de la conexión —
return $dbdevuelve el objetoPDOal controlador.
Más sobre la arquitectura
Autenticación
Flujo de login, sesiones PHP y sistema RBAC de permisos por rol.
Plantilla
Sistema de plantillas: inclusión dinámica de fragmentos y mensajes flash.
Enrutamiento
Reglas mod_rewrite en
.htaccess y mapa completo de rutas.