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
- Definición de la Clase: 
UserControlleres una clase que maneja las solicitudes relacionadas con los usuarios. - 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. - Interacción con el Modelo: Utiliza el método 
finddel modeloUserModelpara obtener los datos del usuario. - Incluir la Vista: Si el usuario existe, incluye la vista 
user.phppara 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
- Definición de la Clase: 
UserModeles una clase que maneja los datos de los usuarios. - 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. - Conexión a la Base de Datos: Utiliza PDO para conectarse a la base de datos.
 - Preparar y Ejecutar la Consulta: Prepara una consulta SQL para seleccionar el usuario por ID y la ejecuta.
 - 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
- Obtener la URL Solicitada: Utiliza 
$_GET['url']para obtener la URL solicitada. - Definir las Rutas: Define un array de rutas que mapea URLs a controladores y métodos.
 - Verificar la Ruta: Comprueba si la URL solicitada existe en el array de rutas.
 - 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
- Crea un controlador 
ProductControllercon un métodolistque obtenga todos los productos de la base de datos y los muestre en una vista. - Crea un modelo 
ProductModelcon un métodoallque devuelva todos los productos de la base de datos. - 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
- ¿Qué es PHP?
 - Configuración del Entorno de Desarrollo
 - Tu Primer Script en PHP
 - Sintaxis y Variables en PHP
 - Tipos de Datos en PHP
 
Módulo 2: Estructuras de Control
Módulo 3: Funciones
- Definiendo y Llamando Funciones
 - Parámetros de Función y Valores de Retorno
 - Ámbito de Variables
 - Funciones Anónimas y Closures
 
Módulo 4: Arrays
Módulo 5: Trabajando con Formularios
- Manejo de Datos de Formularios
 - Validación de Formularios
 - Subida de Archivos
 - Seguridad en Formularios
 
Módulo 6: Trabajando con Archivos
- Lectura y Escritura de Archivos
 - Funciones de Manejo de Archivos
 - Permisos de Archivos
 - Funciones de Directorio
 
Módulo 7: Programación Orientada a Objetos (POO)
- Introducción a la POO
 - Clases y Objetos
 - Propiedades y Métodos
 - Herencia
 - Interfaces y Clases Abstractas
 - Traits
 
Módulo 8: Trabajando con Bases de Datos
- Introducción a las Bases de Datos
 - Conectando a una Base de Datos MySQL
 - Realizando Operaciones CRUD
 - Usando PDO para la Interacción con la Base de Datos
 - Seguridad en Bases de Datos
 
Módulo 9: Técnicas Avanzadas de PHP
- Manejo de Errores y Excepciones
 - Sesiones y Cookies
 - Expresiones Regulares
 - Trabajando con JSON y XML
 - PHP y Servicios Web
 
Módulo 10: Frameworks de PHP y Mejores Prácticas
- Introducción a los Frameworks de PHP
 - Empezando con Laravel
 - Arquitectura MVC
 - Mejores Prácticas en el Desarrollo de PHP
 - Pruebas y Depuración
 
