La arquitectura MVC (Modelo-Vista-Controlador) es un patrón de diseño ampliamente utilizado en el desarrollo de aplicaciones web. Este patrón separa la aplicación en tres componentes principales: el Modelo, la Vista y el Controlador. Esta separación facilita la gestión del código, mejora la escalabilidad y hace que el desarrollo sea más organizado y mantenible.

¿Qué es MVC?

MVC es un acrónimo que representa:

  • Modelo (Model): Maneja la lógica de datos de la aplicación. Es responsable de recuperar datos de la base de datos, procesarlos y devolverlos al controlador.
  • Vista (View): Es la interfaz de usuario. Presenta los datos del modelo al usuario y envía las acciones del usuario al controlador.
  • Controlador (Controller): Actúa como un intermediario entre el modelo y la vista. Recibe las entradas del usuario, las procesa (a menudo interactuando con el modelo) y devuelve la salida adecuada a la vista.

Beneficios de Usar MVC

  • Separación de Preocupaciones: Cada componente tiene una responsabilidad específica, lo que facilita la gestión y el mantenimiento del código.
  • Reutilización de Código: Los componentes pueden ser reutilizados en diferentes partes de la aplicación.
  • Facilita el Trabajo en Equipo: Los desarrolladores pueden trabajar en diferentes componentes de la aplicación de manera independiente.

Estructura de un Proyecto MVC

A continuación, se muestra una estructura típica de un proyecto MVC en PHP:

/project-root
    /app
        /Controllers
            HomeController.php
        /Models
            User.php
        /Views
            /home
                index.php
    /public
        index.php
    /config
        database.php
    /vendor
    .htaccess
    composer.json

Descripción de los Directorios

  • /app: Contiene los controladores, modelos y vistas de la aplicación.
    • /Controllers: Contiene los controladores que manejan las solicitudes del usuario.
    • /Models: Contiene los modelos que interactúan con la base de datos.
    • /Views: Contiene las vistas que presentan la interfaz de usuario.
  • /public: Contiene el archivo de entrada principal (index.php) y otros recursos públicos como CSS, JavaScript e imágenes.
  • /config: Contiene archivos de configuración, como la configuración de la base de datos.
  • /vendor: Contiene las dependencias del proyecto instaladas mediante Composer.

Ejemplo Práctico

Vamos a crear un pequeño ejemplo de una aplicación MVC en PHP que muestra una lista de usuarios.

Paso 1: Configuración del Entorno

Asegúrate de tener un servidor web (como Apache) y PHP instalados. También necesitarás Composer para manejar las dependencias.

Paso 2: Crear el Modelo

// app/Models/User.php
class User {
    public static function getAllUsers() {
        // Normalmente, aquí se haría una consulta a la base de datos.
        // Para este ejemplo, devolveremos un array estático.
        return [
            ['id' => 1, 'name' => 'John Doe'],
            ['id' => 2, 'name' => 'Jane Smith'],
        ];
    }
}

Paso 3: Crear el Controlador

// app/Controllers/HomeController.php
require_once 'app/Models/User.php';

class HomeController {
    public function index() {
        $users = User::getAllUsers();
        require 'app/Views/home/index.php';
    }
}

Paso 4: Crear la Vista

<!-- app/Views/home/index.php -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Lista de Usuarios</title>
</head>
<body>
    <h1>Lista de Usuarios</h1>
    <ul>
        <?php foreach ($users as $user): ?>
            <li><?php echo $user['name']; ?></li>
        <?php endforeach; ?>
    </ul>
</body>
</html>

Paso 5: Configurar el Punto de Entrada

// public/index.php
require_once '../app/Controllers/HomeController.php';

$controller = new HomeController();
$controller->index();

Paso 6: Configurar el Servidor Web

Asegúrate de que tu servidor web esté configurado para apuntar al directorio public como el directorio raíz del documento. Si estás usando Apache, puedes usar un archivo .htaccess para redirigir todas las solicitudes a index.php.

# .htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]

Ejercicio Práctico

Ejercicio 1: Añadir un Nuevo Usuario

  1. Objetivo: Añadir la funcionalidad para agregar un nuevo usuario a la lista.
  2. Instrucciones:
    • Crea un formulario en la vista para añadir un nuevo usuario.
    • Modifica el controlador para manejar la solicitud POST del formulario.
    • Actualiza el modelo para añadir el nuevo usuario a la lista.

Solución

Paso 1: Actualizar la Vista

<!-- app/Views/home/index.php -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Lista de Usuarios</title>
</head>
<body>
    <h1>Lista de Usuarios</h1>
    <ul>
        <?php foreach ($users as $user): ?>
            <li><?php echo $user['name']; ?></li>
        <?php endforeach; ?>
    </ul>
    <h2>Añadir Nuevo Usuario</h2>
    <form action="" method="POST">
        <input type="text" name="name" placeholder="Nombre del usuario" required>
        <button type="submit">Añadir</button>
    </form>
</body>
</html>

Paso 2: Actualizar el Controlador

// app/Controllers/HomeController.php
require_once 'app/Models/User.php';

class HomeController {
    public function index() {
        if ($_SERVER['REQUEST_METHOD'] === 'POST') {
            $name = $_POST['name'];
            User::addUser($name);
        }
        $users = User::getAllUsers();
        require 'app/Views/home/index.php';
    }
}

Paso 3: Actualizar el Modelo

// app/Models/User.php
class User {
    private static $users = [
        ['id' => 1, 'name' => 'John Doe'],
        ['id' => 2, 'name' => 'Jane Smith'],
    ];

    public static function getAllUsers() {
        return self::$users;
    }

    public static function addUser($name) {
        $id = count(self::$users) + 1;
        self::$users[] = ['id' => $id, 'name' => $name];
    }
}

Conclusión

En esta sección, hemos aprendido sobre la arquitectura MVC y cómo implementarla en un proyecto PHP. Hemos visto cómo separar la lógica de la aplicación en modelos, vistas y controladores, y cómo esta separación facilita el desarrollo y mantenimiento del código. Además, hemos creado un ejemplo práctico para reforzar los conceptos aprendidos.

En el siguiente módulo, exploraremos las mejores prácticas en el desarrollo de PHP y cómo utilizar frameworks populares como Laravel para acelerar el desarrollo de aplicaciones web.

Curso de Programación en PHP

Módulo 1: Introducción a PHP

Módulo 2: Estructuras de Control

Módulo 3: Funciones

Módulo 4: Arrays

Módulo 5: Trabajando con Formularios

Módulo 6: Trabajando con Archivos

Módulo 7: Programación Orientada a Objetos (POO)

Módulo 8: Trabajando con Bases de Datos

Módulo 9: Técnicas Avanzadas de PHP

Módulo 10: Frameworks de PHP y Mejores Prácticas

Módulo 11: Proyecto: Construyendo una Aplicación Web

© Copyright 2024. Todos los derechos reservados