1-mvc
Estructura MVC
1. Modelo (ModeloUsuarios)
class ModeloUsuarios {
static public function obtenerUsuarios() {
$usuarios = [
["id" => 1, "nombre" => "Ana García", "fecha_registro" => "2024-01-15"],
// ... más usuarios
];
return $usuarios;
}
}Función: Obtiene datos (simulados) de usuarios
Responsabilidad: Manejar datos y lógica de negocio
Static: Se puede llamar sin instanciar la clase
2. Controlador (ControladorUsuarios)
class ControladorUsuarios {
static public function ctrObtenerUsuarios() {
return ModeloUsuarios::obtenerUsuarios();
}
}Función: Intermediario entre Vista y Modelo
Responsabilidad: Recibir peticiones y devolver respuestas
Flujo: Llama al modelo y pasa datos a la vista
3. Vista (HTML con Bootstrap)
$usuarios = ControladorUsuarios::ctrObtenerUsuarios();Aquí ocurre la magia: La vista llama directamente al controlador
Muestra datos: En una tabla HTML con Bootstrap
Seguridad: Usa
htmlspecialchars()para prevenir XSS
🔄 Flujo de la Aplicación
El usuario solicita la página
La vista llama a
ControladorUsuarios::ctrObtenerUsuarios()El controlador llama a
ModeloUsuarios::obtenerUsuarios()El modelo devuelve datos simulados
El controlador pasa los datos a la vista
La vista renderiza los datos en HTML
🛡️ Elementos de Seguridad
htmlspecialchars(): Previene ataques XSS al escapar caracteres HTMLDatos estáticos: No hay riesgo de inyección SQL en este ejemplo
💡 Mejoras Potenciales
Separar vista y lógica: En MVC tradicional, el controlador debería cargar la vista
Conexión a BD: Reemplazar el array estático por una base de datos real
Routing: Implementar un sistema de rutas para mejor organización
⚠️ Nota Importante
Este es un ejemplo simplificado. En una aplicación real:
La vista NO debería llamar directamente al controlador
Se usaría un sistema de routing apropiado
Los datos vendrían de una base de datos real
¿Te gustaría que profundice en algún aspecto específico del código?
Aquí tienes el ejemplo MVC simplificado con Bootstrap y la vista llamando al controlador:
<?php
// =============================================
// MODELO
// =============================================
class ModeloUsuarios {
static public function obtenerUsuarios() {
$usuarios = [
[
"id" => 1,
"nombre" => "Ana García",
"fecha_registro" => "2024-01-15"
],
[
"id" => 2,
"nombre" => "Carlos López",
"fecha_registro" => "2023-11-20"
],
[
"id" => 3,
"nombre" => "María Rodríguez",
"fecha_registro" => "2024-03-05"
]
];
return $usuarios;
}
}
// =============================================
// CONTROLADOR
// =============================================
class ControladorUsuarios {
static public function ctrObtenerUsuarios() {
return ModeloUsuarios::obtenerUsuarios();
}
}
// =============================================
// VISTA (HTML con Bootstrap)
// =============================================
?>
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Lista de Usuarios</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
<div class="row">
<div class="col-12">
<h1 class="text-center mb-4">📋 Lista de Usuarios</h1>
<?php
// Obtener datos del controlador
$usuarios = ControladorUsuarios::ctrObtenerUsuarios();
if (!empty($usuarios)): ?>
<div class="table-responsive">
<table class="table table-striped table-hover">
<thead class="table-dark">
<tr>
<th>ID</th>
<th>Nombre</th>
<th>Fecha de Registro</th>
</tr>
</thead>
<tbody>
<?php foreach ($usuarios as $usuario): ?>
<tr>
<td><?php echo htmlspecialchars($usuario['id']); ?></td>
<td><?php echo htmlspecialchars($usuario['nombre']); ?></td>
<td><?php echo htmlspecialchars($usuario['fecha_registro']); ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php else: ?>
<div class="alert alert-info text-center">
No hay usuarios registrados.
</div>
<?php endif; ?>
<div class="text-center mt-4">
<a href="#" class="btn btn-primary">Agregar Usuario</a>
<a href="#" class="btn btn-outline-secondary">Actualizar</a>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
Comentarios
Publicar un comentario