MVC-2

 Estructura General

El código está organizado en tres componentes principales del patrón MVC:

1. Modelo (ModeloUsuarios)

php
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áticoobtenerUsuarios() devuelve los datos de usuarios

  • Datos: Array asociativo con ID, nombre y fecha de registro

2. Controlador (ControladorUsuarios)

php
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)

php
// 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

  1. Inicialización: Se carga la página PHP

  2. Controlador: Se crea una instancia de ControladorUsuarios

  3. Modelo: El controlador llama al método estático del modelo

  4. Datos: Se obtiene el array de usuarios

  5. 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 XSS

  • Diseñ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
<?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:

  1. ControladorUsuarios:

    • Eliminé la palabra clave static del método ctrObtenerUsuarios()

    • Cambié static public function por solo public function

  2. 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

Entradas más populares de este blog

token

¿Qué es un token y cómo se utiliza en una API?

Generación de Credenciales API