MVC-2
Estructura General
El código está organizado en tres componentes principales del patrón 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: Maneja los datos (en este caso, un array estático de usuarios)
Método estático:
obtenerUsuarios()devuelve los datos de usuariosDatos: Array asociativo con ID, nombre y fecha de registro
2. Controlador (ControladorUsuarios)
class ControladorUsuarios {
public function ctrObtenerUsuarios() {
return ModeloUsuarios::obtenerUsuarios();
}
}Instancia no estática: Se crea una instancia del controlador
Función: Llama al modelo para obtener datos
Puente: Conecta la vista con el modelo
3. Vista (HTML con Bootstrap)
// Crear instancia del controlador
$controlador = new ControladorUsuarios();
$usuarios = $controlador->ctrObtenerUsuarios();Interfaz de usuario: Muestra los datos en una tabla HTML
Bootstrap: Framework CSS para diseño responsive
Seguridad: Usa
htmlspecialchars()para evitar XSS
Flujo de Ejecución
Inicialización: Se carga la página PHP
Controlador: Se crea una instancia de
ControladorUsuariosModelo: El controlador llama al método estático del modelo
Datos: Se obtiene el array de usuarios
Vista: Los datos se muestran en una tabla HTML con Bootstrap
Características Importantes
Separación de responsabilidades: Cada componente tiene una función específica
HTML seguro: Uso de
htmlspecialchars()para prevenir ataques XSSDiseño responsive: Bootstrap asegura que funcione en diferentes dispositivos
Métodos públicos: La interfaz está bien definida entre componentes
Mejoras Posibles
Base de datos: Reemplazar el array estático por consultas a BD real
Validaciones: Añadir validación de datos
Manejo de errores: Implementar try-catch para mejor control
Ruteo: Separar completamente la lógica de la vista
Este código es un buen ejemplo básico de implementación del patrón MVC en PHP.
:
<?php
// =============================================
// MODELO (se mantiene igual)
// =============================================
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 (modificado para no ser estático)
// =============================================
class ControladorUsuarios {
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
// Crear instancia del controlador y obtener datos
$controlador = new ControladorUsuarios();
$usuarios = $controlador->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>Cambios realizados:
ControladorUsuarios:
Eliminé la palabra clave
staticdel métodoctrObtenerUsuarios()Cambié
static public functionpor solopublic function
Vista:
En lugar de la llamada estática
ControladorUsuarios::ctrObtenerUsuarios()Creé una instancia:
$controlador = new ControladorUsuarios();Llamé al método mediante la instancia:
$controlador->ctrObtenerUsuarios();
El modelo se mantuvo igual como solicitaste, conservando su método estático.
Comentarios
Publicar un comentario