En esta sección, vamos a implementar la lógica del backend para nuestra aplicación web. Este es un paso crucial, ya que el backend es responsable de manejar la lógica de negocio, interactuar con la base de datos y proporcionar datos a la interfaz de usuario.

Objetivos de Aprendizaje

  • Comprender la estructura del backend en una aplicación web.
  • Implementar controladores y modelos en PHP.
  • Conectar el backend con la base de datos.
  • Manejar solicitudes HTTP y respuestas.

Estructura del Backend

Antes de comenzar a codificar, es importante entender cómo estructuraremos nuestro backend. Una estructura comúnmente utilizada es la arquitectura MVC (Modelo-Vista-Controlador).

Arquitectura MVC

  • Modelo (Model): Representa los datos y la lógica de negocio. Interactúa con la base de datos.
  • Vista (View): Representa la interfaz de usuario. Muestra los datos al usuario.
  • Controlador (Controller): Maneja las solicitudes del usuario, interactúa con el modelo y selecciona la vista adecuada para mostrar.

Implementación de Controladores

Los controladores son responsables de manejar las solicitudes HTTP y coordinar la interacción entre el modelo y la vista.

Ejemplo de un Controlador

<?php
class UserController {
    public function show($id) {
        // Obtener el usuario del modelo
        $user = UserModel::find($id);
        
        // Verificar si el usuario existe
        if ($user) {
            // Mostrar la vista con los datos del usuario
            include 'views/user.php';
        } else {
            // Mostrar un mensaje de error
            echo "Usuario no encontrado.";
        }
    }
}
?>

Explicación del Código

  1. Definición de la Clase: UserController es una clase que maneja las solicitudes relacionadas con los usuarios.
  2. Método show: Este método toma un ID de usuario como parámetro, obtiene los datos del usuario del modelo y muestra la vista correspondiente.
  3. Interacción con el Modelo: Utiliza el método find del modelo UserModel para obtener los datos del usuario.
  4. Incluir la Vista: Si el usuario existe, incluye la vista user.php para mostrar los datos. Si no, muestra un mensaje de error.

Implementación de Modelos

Los modelos son responsables de interactuar con la base de datos y representar los datos de la aplicación.

Ejemplo de un Modelo

<?php
class UserModel {
    public static function find($id) {
        // Conectar a la base de datos
        $db = new PDO('mysql:host=localhost;dbname=mydatabase', 'root', '');
        
        // Preparar y ejecutar la consulta
        $stmt = $db->prepare('SELECT * FROM users WHERE id = :id');
        $stmt->execute(['id' => $id]);
        
        // Obtener los resultados
        return $stmt->fetch(PDO::FETCH_ASSOC);
    }
}
?>

Explicación del Código

  1. Definición de la Clase: UserModel es una clase que maneja los datos de los usuarios.
  2. Método find: Este método toma un ID de usuario como parámetro y devuelve los datos del usuario desde la base de datos.
  3. Conexión a la Base de Datos: Utiliza PDO para conectarse a la base de datos.
  4. Preparar y Ejecutar la Consulta: Prepara una consulta SQL para seleccionar el usuario por ID y la ejecuta.
  5. Obtener Resultados: Devuelve los resultados de la consulta como un array asociativo.

Manejo de Solicitudes HTTP

Para manejar las solicitudes HTTP, podemos utilizar un archivo de enrutamiento que determine qué controlador y método deben ser llamados en función de la URL solicitada.

Ejemplo de un Enrutador

<?php
// Obtener la URL solicitada
$url = $_GET['url'] ?? '';

// Definir las rutas
$routes = [
    'user/show' => 'UserController@show',
];

// Verificar si la ruta existe
if (array_key_exists($url, $routes)) {
    // Obtener el controlador y el método
    list($controller, $method) = explode('@', $routes[$url]);
    
    // Crear una instancia del controlador
    $controllerInstance = new $controller();
    
    // Llamar al método del controlador
    $controllerInstance->$method($_GET['id'] ?? null);
} else {
    // Mostrar un mensaje de error si la ruta no existe
    echo "Página no encontrada.";
}
?>

Explicación del Código

  1. Obtener la URL Solicitada: Utiliza $_GET['url'] para obtener la URL solicitada.
  2. Definir las Rutas: Define un array de rutas que mapea URLs a controladores y métodos.
  3. Verificar la Ruta: Comprueba si la URL solicitada existe en el array de rutas.
  4. Llamar al Controlador y Método: Si la ruta existe, crea una instancia del controlador y llama al método correspondiente, pasando cualquier parámetro necesario.

Ejercicio Práctico

Ejercicio

  1. Crea un controlador ProductController con un método list que obtenga todos los productos de la base de datos y los muestre en una vista.
  2. Crea un modelo ProductModel con un método all que devuelva todos los productos de la base de datos.
  3. Configura el enrutador para manejar una solicitud a product/list.

Solución

ProductController.php

<?php
class ProductController {
    public function list() {
        // Obtener todos los productos del modelo
        $products = ProductModel::all();
        
        // Incluir la vista para mostrar los productos
        include 'views/products.php';
    }
}
?>

ProductModel.php

<?php
class ProductModel {
    public static function all() {
        // Conectar a la base de datos
        $db = new PDO('mysql:host=localhost;dbname=mydatabase', 'root', '');
        
        // Preparar y ejecutar la consulta
        $stmt = $db->query('SELECT * FROM products');
        
        // Obtener los resultados
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
}
?>

Enrutador

<?php
// Obtener la URL solicitada
$url = $_GET['url'] ?? '';

// Definir las rutas
$routes = [
    'user/show' => 'UserController@show',
    'product/list' => 'ProductController@list',
];

// Verificar si la ruta existe
if (array_key_exists($url, $routes)) {
    // Obtener el controlador y el método
    list($controller, $method) = explode('@', $routes[$url]);
    
    // Crear una instancia del controlador
    $controllerInstance = new $controller();
    
    // Llamar al método del controlador
    $controllerInstance->$method($_GET['id'] ?? null);
} else {
    // Mostrar un mensaje de error si la ruta no existe
    echo "Página no encontrada.";
}
?>

Vista (views/products.php)

<!DOCTYPE html>
<html>
<head>
    <title>Lista de Productos</title>
</head>
<body>
    <h1>Lista de Productos</h1>
    <ul>
        <?php foreach ($products as $product): ?>
            <li><?php echo htmlspecialchars($product['name']); ?></li>
        <?php endforeach; ?>
    </ul>
</body>
</html>

Conclusión

En esta sección, hemos aprendido cómo implementar la lógica del backend utilizando la arquitectura MVC. Hemos creado controladores y modelos, manejado solicitudes HTTP y conectado nuestro backend con la base de datos. Estos conceptos son fundamentales para construir aplicaciones web robustas y escalables.

En la siguiente sección, integraremos nuestro backend con la base de datos para completar la funcionalidad de nuestra aplicación 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