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

Suscríbete a nuestro boletín

Te enviaremos publicaciones con consejos útiles y múltiples recursos para que sigas aprendiendo.

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'
]);
Únete a nuestra comunidad en Discord y comparte con los usuarios y autores de Styde, 100% gratis.

Únete hoy

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