Bueno, ya tenemos nuestra aplicación funcionando, podemos registrarnos, iniciar sesión y administrar tareas. Sin embargo, por si no lo notaste, cuando guardamos una tarea no tenemos en cuenta los campos de validación. Aunque las validaciones parecen siempre un dolor de cabeza, Laravel nos permite hacerlo más llevadero, e incluso en esta última versión es más fácil que nunca.
En primer lugar vamos a detenernos en algo, si volvemos a nuestro controlador de tareas, podemos ver que tanto en los métodos store(), como update(), tenemos el siguiente parámetro:
Request $request
Los objetos de tipo Request nos permiten recuperar datos del cliente, como por ejemplo los campos ingresados por el usuario.
Entonces vamos a crear una clase Request de la siguiente forma. Abrimos la consola e ingresamos:
php artisan make:request TareasRequest
Ahora si vamos a app/Http/Requests podemos encontrar la clase que acabamos de crear TareasRequest. Aquí vamos a definir las validaciones de la siguiente manera:
public function authorize() { return false; }
Lo reemplazamos para que devuelva true.
public function authorize() { return true; }
Y luego reemplazamos el método rules():
public function rules() { return [ 'titulo' => 'required|min:5|max:255', 'descripcion' => 'required|max:800', 'estado_id' => 'required|numeric' ]; }
Ahora para que el controlador acepte estas validaciones vamos a reemplazar la cabecera de los métodos store() y update(). Primero vamos a TareasController y agregamos la siguiente línea en la cabecera (antes de class):
use App\Http\Requests\TareasRequest;
Ya está disponible la clase, así podemos usarla. Así que reemplazamos:
public function store(TareasRequest $request)
Y luego:
public function update(TareasRequest $request, $id)
(En ambos casos reemplazamos Request por TareasRequest)
Y en la vista, save.blade.php vamos a agregar el contenedor que muestre sí hay errores de validación:
@if (count($errors) > 0) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif
Personalizar errores
Por último, al ingresar datos incorrectos, podemos observar que estos se ven así:
- The titulo field is required.
- The descripcion field is required.
- The estado id field is required.
Para cambiar el mensaje de error, simplemente debemos agregar un método a la clase TareasRequest:
public function messages() { return [ 'titulo.required' => 'Usted debe ingresar un título', 'descripcion.required' => 'Usted debe ingresar una descripción', 'estado_id.required' => 'Usted debe ingresar un estado' ]; }
Los errores entonces se verán ahora así:
- Usted debe ingresar un título
- Usted debe ingresar una descripción
- Usted debe ingresar un estado
Podemos aprender más de reglas de validaciones en la página de Laravel:
Anterior: Laravel 5, parte 6: Vistas y Helpers