Ejercicios
Last updated
Last updated
En los ejercicios de esta sección vamos a completar el proyecto del videoclub terminando el procesamiento de los formularios y añadiendo el sistema de autenticación de usuarios.
En primer lugar vamos a crear la tabla de la base de datos para almacenar los usuarios que tendrán acceso a la plataforma de gestión del videoclub.
Como hemos visto en la teoría, Laravel ya incluye una migración con el nombre create_users_table
para la tabla users
con todos los campos necesarios. Vamos a abrir esta migración y a comprobar que los campos incluidos coinciden con los de la siguiente tabla:
Comprueba también que en el método down
de la migración se deshagan los cambios que se hacen en el método up
, en este caso sería eliminar la tabla.
Por último usamos el comando de Artisan que añade las nuevas migraciones y comprobamos con PHPMyAdmin que la tabla se ha creado correctamente con todos campos indicados.
Ahora vamos a proceder a rellenar la tabla users
con los datos iniciales. Para esto editamos el fichero de semillas situado en database/seeds/DatabaseSeeder.php
y seguiremos los siguientes pasos:
Creamos un método privado (dentro de la misma clase) llamado seedUsers()
que se tendrá que llamar desde el método run
de la forma:
Dentro del nuevo método seedUsers()
realizamos las siguientes acciones:
En primer lugar borramos el contenido de la tabla users
.
Y a continuación creamos un par de usuarios de prueba. Recuerda que para guardar el password es necesario encriptarlo manualmente usando el método bcrypt
(Revisa la sección "Registro de un usuario").
Por último tendremos que ejecutar el comando de Artisan que procesa las semillas. Una vez realizado esto comprobamos en PHPMyAdmin que se han añadido los usuarios a la tabla users.
En este ejercicio vamos a completar el sistema de autenticación. En primer lugar ejecuta el comando de Artisan php artisan make:auth
para generar todas las rutas y vistas necesarias para el control de usuarios. A continuación edita el fichero routes/web.php
y realiza las siguientes acciones:
Elimina (o comenta) las rutas de login y logout que habíamos añadido manualmente en los primeros ejercicios a fin de que se utilicen las nuevas rutas definidas por Laravel.
Añade un middleware de tipo grupo que aplique el filtro auth
para proteger todas las rutas del catálogo (menos la raíz /
y las de autenticación).
Revisa mediante el comando de Artisan php artisan route:list
las nuevas rutas y que el filtro auth
se aplique correctamente.
Modifica el controlador LoginController
para que cuando se realice el login te redirija a la ruta /catalog
. Para esto tienes que modificar su propiedad redirectTo
para añadir la ruta de redirección (revisa el apartado "Autenticación de un usuario" de la teoría).
Modifica la vista de login generada por Laravel (resources/views/auth/login.blade.php
) para que en lugar de utilizar su layout utilice el que creamos en los primeros ejercicios (resources/views/layouts/master.blade.php
).
A continuación abrimos el controlador HomeController
para completar el método getHome
. Este método de momento solo realiza una redirección a /catalog
. Modifica el código para que en caso de que el usuario no esté autenticado le redirija a la ruta /login
Comprueba en este punto que el sistema de autenticación funciona correctamente: no te permite entrar a la rutas protegidas si no estás autenticado, puedes acceder con los usuarios definidos en el fichero de semillas y funciona el botón de cerrar sesión.
Por último edita la vista resources/views/partials/navbar.blade.php
que habíamos copiado de las plantillas y cambia la línea @if( true || Auth::check() )
por @if( Auth::check() )
. De esta forma el menú solo se mostrará cuando el usuario esté autenticado.
En primer lugar vamos a añadir las rutas que nos van a hacer falta para recoger los datos al enviar los formularios. Para esto editamos el fichero de rutas y añadimos dos rutas (también protegidas por el filtro auth
):
Una ruta de tipo POST para la url catalog/create
que apuntará al método postCreate
del controlador CatalogController
.
Y otra ruta tipo PUT para la url catalog/edit/{id}
que apuntará al método putEdit
del controlador CatalogController
.
A continuación vamos a editar la vista catalog/edit.blade.php
con los siguientes cambios:
Revisar que el método de envío del formulario sea tipo PUT.
Tenemos que modificar todos los inputs para que como valor del campo ponga el valor correspondiente de la película. Por ejemplo, en el primer input tendríamos que añadir value="{{$pelicula->title}}"
. Realiza lo mismo para el resto de campos: year, director, poster y synopsis. El único campo distinto será el de synopsis ya que el input es tipo textarea, en este caso el valor lo tendremos que poner directamente entre la etiqueta de apertura y la de cierre.
Por último tenemos que actualizar el controlador CatalogController
con los dos nuevos métodos. En ambos casos tenemos que usar la inyección de dependencias para añadir la clase Request
como parámetro de entrada (revisa la sección "Datos de entrada" de la teoría). Además para cada método haremos:
En el método postCreate
creamos una nueva instancia del modelo Movie
, asignamos el valor de todos los campos de entrada (title, year, director, poster y synopsis) y los guardamos. Por último, después de guardar, hacemos una redirección a la ruta /catalog
.
En el método putEdit
buscamos la película con el identificador pasado por parámetro, actualizamos sus campos y los guardamos. Por último realizamos una redirección a la pantalla con la vista detalle de la película editada.
Nota: de momento en caso de error no se mostrará nada.
Campo
Tipo
Modificador
id
Autoincremental
name
String
String
unique
password
String
remember_token
Campo remember_token
timestamps
Timestamps de Eloquent