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:
UserController
es 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
find
del modeloUserModel
para obtener los datos del usuario. - 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
- Definición de la Clase:
UserModel
es 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
ProductController
con un métodolist
que obtenga todos los productos de la base de datos y los muestre en una vista. - Crea un modelo
ProductModel
con un métodoall
que 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