1-mvc

 

Estructura 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: Obtiene datos (simulados) de usuarios

  • Responsabilidad: Manejar datos y lógica de negocio

  • Static: Se puede llamar sin instanciar la clase

2. Controlador (ControladorUsuarios)

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

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

  1. El usuario solicita la página

  2. La vista llama a ControladorUsuarios::ctrObtenerUsuarios()

  3. El controlador llama a ModeloUsuarios::obtenerUsuarios()

  4. El modelo devuelve datos simulados

  5. El controlador pasa los datos a la vista

  6. La vista renderiza los datos en HTML

🛡️ Elementos de Seguridad

  • htmlspecialchars(): Previene ataques XSS al escapar caracteres HTML

  • Datos estáticos: No hay riesgo de inyección SQL en este ejemplo

💡 Mejoras Potenciales

  1. Separar vista y lógica: En MVC tradicional, el controlador debería cargar la vista

  2. Conexión a BD: Reemplazar el array estático por una base de datos real

  3. 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
<?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

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