Introducción a desarrollo web con PHP y Yii

1

Conceptos claves de G y G2: Desarrollo Ágil PHP

2

Desarrollo web con Yii: Framework potente y bien documentado

3

Arquitectura MVC: Modelo, Vista y Controlador en Detalle

4

Instalación y configuración de Yii2 con Composer y MySQL

5

Configuración Básica de Archivos en Proyectos Yii2

6

Configuración de Entorno en Yii2: Uso de Variables en PHP

Quiz: Introducción a desarrollo web con PHP y Yii

Esquema de la aplicación

7

Relaciones de datos en Yii2: Crear bibliotecas personales

8

Creación de Bases de Datos SQL desde Cero

9

Creación y Gestión de Bases de Datos MySQL

Quiz: Esquema de la aplicación

Modelos, vistas y controladores

10

Comandos en Yii: Creación y Ejecución desde Terminal

11

Creación y uso de modelos en PHP con Yii

12

Uso de ActiveRecord en Yii para Bases de Datos

13

Creación de Modelos en el Framework Yii

14

Relaciones en Yii: Conecta modelos Book y Author fácilmente

15

Relaciones entre Modelos en Yii: Has Many y Getters

16

Desarrollo de Controladores Web en Yii Framework

17

Redirección y Mensajes Flash en Yii2

18

URL Bonitas en PHP: Configuración y Manejo Avanzado

19

Smarty: Plantillas PHP eficaces en aplicaciones web Yii

20

Uso de Smarty en Yii2 para Plantillas Eficientes

Quiz: Modelos, vistas y controladores

Manejo de usuarios con Yii2

21

Creación de Tabla Usuarios con Funciones de Autenticación Segura

22

Ofuscación de contraseñas en Yii con MD5

23

Autenticación de Usuarios en Yii2: Configuración y Personalización

24

Validación de Datos de Usuario en Framework Yii

25

Creación de Formulario con Smarty y ActiveForm en PHP

26

Validación de Datos en Modelos con Yii2

27

Validadores de Datos en PHP: Core Validators y Filtros

Quiz: Manejo de usuarios con Yii2

Enlaces, navegación y tablas intermedias

28

Creación de Libros y Validación en PHP

29

Creación y Gestión de Bases de Datos en PHP: Casos Prácticos

30

SQL para Principiantes: Consultas, Joins y Subconsultas

31

Calificación de Libros en PHP: Creación y Validación de Modelos

32

Promedio y Análisis de Calificaciones de Libros y Usuarios

33

Relaciones y Consultas Complejas en Bases de Datos

34

Programación Básica con Framework G para Creación de Bibliotecas

Quiz: Enlaces, navegación y tablas intermedias

Despliegue y cierre del proyecto

35

Deploy de una aplicación PHP a Heroku paso a paso

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Calificación de Libros en PHP: Creación y Validación de Modelos

31/35
Recursos

¿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!

Aportes 3

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Añadan `->label('Puntuación')` para cambiar la etiqueta de *Score* a ... `->radioList()->label()`
Aqui la tarea, debo decir que la documentacion de Yii no me resulta clara, fue realmente complicado encontrar donde insertar el onchange. El radio button si fue relativamente facil. ![]()![](https://static.platzi.com/media/user_upload/tarea%20radio%20buttons-f1a1e66c-6778-4b52-a0cf-66a65aa70467.jpg)
Al punto de estar por concluir el curso, siento desde mi opinión muy personal que la peor decisión fue instalar smarty, ya que dependemos de una extensión, aprender su sintaxis, para muchos que utilizan vs code para programar ocupamos de extensiones para que tenga soporte a dicha extensión de archivo en dicho editor de código, además es un problema identificar cómo usar smarty, etc. Por mucho no es la mejor práctica, me hace ver más sucio el código con esas llaves poco explicitas. Un claro ejemplo el solo hecho de como se importa las clases.