Crear y Gestionar Repisas de Libros en PHP
Clase 29 de 35 • Curso de Desarrollo Web con PHP y Yii2
Resumen
¿Cómo crear una nueva tabla y lógica de negocio en una aplicación?
Crear una nueva funcionalidad en una aplicación existente no tiene por qué ser complicado. En este contenido, nos enfocaremos en cómo añadir una nueva funcionalidad que permite al usuario almacenar qué libros posee. Desde la creación de una tabla hasta la implementación de la lógica de negocios, te mostraremos cómo construir y expandir un sistema de gestión de libros. Acompáñanos en este sencillo pero poderoso viaje de desarrollo.
¿Cómo crear la tabla para almacenar los libros del usuario?
Una tabla en una base de datos es esencial para guardar información relevante de los usuarios. Para empezar, definimos una nueva tabla llamada UserBooks
que almacena datos sobre los libros que tiene cada usuario. La creación es bastante directa:
CREATE TABLE IF NOT EXISTS UserBooks (
UserBookID INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
UserID INTEGER NOT NULL,
BookID INTEGER NOT NULL,
CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Esta tabla simple utiliza un UserBookID
como clave primaria y enlaza los UserID
y BookID
.
¿Cómo integrar la tabla con la lógica de negocios?
Una vez creada la tabla, el siguiente paso es integrar esta nueva funcionalidad en la lógica de nuestra aplicación, comenzando desde la vista hacia el backend.
-
Añadir un enlace en la vista del libro: Para empezar, en la vista detallada de cada libro, añadimos un enlace de HTML que permite al usuario indicar que posee dicho libro.
<a href="controller.php?action=IownThisBook&book_id=<?= $book->id ?>">Tengo este libro</a>
-
Manejando la acción en el controlador: Es fundamental tener un controlador que procese esta información. Añadimos una función al controlador de libros para manejar la acción de "Yo tengo este libro".
public function actionIownThisBook($bookId) { if (Yii::$app->user->isGuest) { return $this->goHome(); } $userBook = new UserBook(); $userBook->userID = Yii::$app->user->identity->id; $userBook->bookID = $bookId; if ($userBook->save()) { Yii::$app->session->setFlash('success', 'Chido'); } return $this->redirect(['book/detail', 'id' => $bookId]); }
¿Cómo crear un modelo para la nueva tabla?
Los modelos son piezas clave que conectan la base de datos con la lógica de programación. Creamos un modelo para UserBook
:
class UserBook extends \yii\db\ActiveRecord {
public static function tableName() {
return 'UserBooks';
}
}
Este modelo es necesario para manejar la lógica de almacenamiento de la información de los libros que poseen los usuarios.
¿Qué consideraciones de seguridad y validación debo tener?
-
Validaciones de Usuario: Asegúrate de validar que el usuario está autenticado antes de permitir el acceso a la funcionalidad de tener libros.
-
Validación de Existencia de Datos: Antes de guardar, podrías verificar que el libro realmente existe y que el usuario no está intentando modificar datos no permitidos.
-
Uso de HTTP GET y POST: Esta implementación utiliza una consulta GET para señalar la propiedad de un libro; sin embargo, para acciones más críticas, como calificar un libro, es preferible utilizar peticiones POST.
Con estos pasos, ampliamos una aplicación de libros, potenciando ligeramente su funcionalidad de manera eficaz. Aprende a aprovechar al máximo la estructura de tu aplicación para desarrollar nuevas características que tus usuarios apreciarán. ¡Sigue explorando nuevas posibilidades!