En esta lección del Curso de Laravel 5.5 desde cero, aprenderemos cómo validar datos provenientes de una petición HTTP (por ejemplo datos enviados a través de un formulario), utilizando el componente de validación que incluye el framework Laravel, además guiaremos el desarrollo a través el uso de pruebas automatizadas.
Repositorio
Ver el código de esta lección en GitHub
Notas
Dentro de la prueba comprobamos que la sesión contiene un error para el campo name
utilizando assertSessionHasErrors
:
$this->from('usuarios/nuevo') ->post('/usuarios/', [ 'name' => '', 'email' => '[email protected]', 'password' => '123456' ]) ->assertRedirect('usuarios/nuevo') ->assertSessionHasErrors(['name']);
El método assertSessionHasErrors
espera que exista un campo name
en el listado de errores de la sesión, independientemente del contenido o mensaje de este error. Sin embargo podemos indicar cual esperamos que sea el contenido o mensaje pasando un array de pares clave-valor en lugar de únicamente el nombre del campo:
$this->post('...')->assertSessionHasErrors(['name' => 'El campo nombre es obligatorio'])
Con assertDatabaseMissing
verificamos que el registro no se esté guardando en la base de datos, al finalizar la petición ejecutada durante el método de prueba:
$this->assertDatabaseMissing('users', [ 'email' => '[email protected]' ]);
Además podemos utilizar el método assertEquals
en lugar de assertDatabaseMissing
para comprobar que el usuario no está siendo guardado en la base de datos. A este método le pasamos el valor esperado como primer argumento y como segundo argumento pasamos el número de usuarios en la base de datos, utilizando el método count
que provee Eloquent:
$this->assertEquals(0, User::count());
En este caso el número de usuarios en la base de datos retornado por User::count()
debería ser cero ya que dentro de la prueba estamos utilizando el trait RefreshDatabase
.
Pasar errores a la sesión
Desde el controlador, utilizando el método withErrors
podemos pasar un array de errores al realizar una redirección. Dichos errores serán almacenados en la sesión:
return redirect('usuarios/nuevo')->withErrors([ 'name' => 'El campo nombre es obligatorio' ]);
Validación automática con validate()
Podemos llamar al método validate()
en el objeto request
pasando como valor un array asociativo donde cada llave será el nombre de cada campo esperado y el valor una cadena con las reglas de validación:
$data = request()->validate([ 'name' => 'required' ]);
Pasando otro array como segundo argumento podemos especificar los mensajes de los errores. Al nombre del campo debemos anexar el nombre de la regla de validación (en este caso required
y nota que «name» y «required» están separados por un punto):
$data = request()->validate([ 'name' => 'required' ], [ 'name.required' => 'El campo nombre es obligatorio' ]);
Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.
Lección anterior Creación de formulario para agregar usuarios con Laravel Lección siguiente Mostrar mensajes de errores de validación con Laravel