Calificación de Libros con Validación en PHP y Yii Framework

Clase 31 de 35Curso de Desarrollo Web con PHP y Yii2

Resumen

¿Cómo calificar libros en una aplicación web?

Calificar libros en una aplicación puede ser una tarea sencilla si se sigue un proceso bien estructurado. La implementación de esta funcionalidad requiere la creación de tablas, modelos, formularios y controladores. A continuación, se describen los pasos básicos para calificar libros y se explica cómo integrar la calificación en una aplicación web.

¿Cómo crear el modelo y la tabla para calificaciones?

Para comenzar, se necesita una nueva tabla que almacene las calificaciones de los libros. Esta tabla incluirá el User ID, el Book ID, y una calificación de 1 a 5, además de una llave de no repetición para que User ID y Book ID no se repitan juntos.

Primero se crea un modelo llamado BookScore. A continuación, se define la función de reglas para validar las calificaciones:

public function rules()
{
    return [
        [['score'], 'required'],
        [['score'], 'integer', 'min' => 1, 'max' => 5],
    ];
}

¿Cómo implementar la lógica para guardar las calificaciones?

Una vez que el modelo y la tabla están definidos, pasamos a la lógica de la aplicación que se encargará de recibir y procesar las calificaciones enviadas por el usuario. Se debe acceder al controlador y crear las acciones necesarias.

Se inicia creando un nuevo objeto BookScore como un "placeholder":

$bookScore = new BookScore();

Para gestionar la lógica del almacenamiento, se crea una función actionScore, que recibirá todos los datos via POST:

public function actionScore()
{
    $bookScore = new BookScore();
    if ($bookScore->load(Yii::$app->request->post()) && $bookScore->validate()) {
        $bookScore->user_id = Yii::$app->user->identity->id;
        if ($bookScore->save()) {
            Yii::$app->session->setFlash('success', 'Gracias por tu calificación.');
            return $this->redirect(['book/detail', 'id' => $bookScore->book_id]);
        }
    }
}

¿Cómo se crea el formulario para calificar?

Para pintar y manejar el formulario de calificación, se necesita modificar la vista book_detail. Aquí se crea un formulario que apunta a la nueva acción actionScore:

<?php $form = ActiveForm::begin(['action' => ['book/score'], 'method' => 'post']); ?>
    <?= $form->field($bookScore, 'score')->dropDownList(
        [
            1 => '⭐',
            2 => '⭐⭐',
            3 => '⭐⭐⭐',
            4 => '⭐⭐⭐⭐',
            5 => '⭐⭐⭐⭐⭐'
        ]
    ) ?>
    <?= Html::submitButton('Calificar', ['class' => 'btn btn-primary']) ?>
<?php ActiveForm::end(); ?>

Adicionalmente, se debe incluir un campo oculto para el Book ID:

<?= $form->field($bookScore, 'book_id')->hiddenInput()->label(false) ?>

¿Cuál es la importancia de validar y gestionar errores?

Es crucial verificar que todas las validaciones estén implementadas correctamente y que cualquier problema potencial se maneje de manera adecuada. Si se omiten validaciones esenciales, como asegurar que User ID se capture apropiadamente, se podrían producir errores en la lógica de la aplicación.

¿Qué mejoras se pueden implementar para la experiencia del usuario?

  • Cambiar el dropDownList a radio buttons: Esto puede proporcionar una experiencia de usuario más interactiva y visualmente atractiva.
  • Submit automático al cambiar la selección: Implementar un onChange en el campo para enviar automáticamente el formulario podría agilizar la interacción del usuario.

Al seguir estos pasos y consejos, puedes implementar un sistema de calificación de libros robusto y eficiente en tu aplicación web. También es importante recordar la validación de los datos y ofrecer una experiencia de usuario positiva, asegurando que el sistema sea intuitivo y eficaz. ¡Sigue adelante, el aprendizaje te abrirá nuevas puertas!