Novedades de Laravel 5.5

Laravel nos proporciona una gran variedad de reglas para validar las peticiones o requests, pero cuando ninguna se adapta al contexto de lo que se quiere verificar debemos crear una regla personalizada Esto ya era posible en Laravel por ejemplo extendiendo la clase de validación, sin embargo, ahora en Laravel 5.5 podremos crearla de manera rápida y sencilla con el comando de Artisan make:rule. En el siguiente video te explicaremos cómo crear reglas de validación personalizadas y además a probarlas con PHPUnit.

Suscríbete a nuestro boletín

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

Notas

Por Clemir Rondón.

En versiones anteriores de Laravel, podíamos crear reglas usando el método extend como explicamos en este tutorial reglas de validación personalizadas en Laravel pero ahora podemos hacerlo de una manera más sencilla:

Creación de la regla

Para crear reglas personalizadas para la validación primero debemos ejecutar el comando php artisan make:rule seguido del nombre de la regla, por ejemplo:

php artisan make:rule RealText

Como resultado se creará el nuevo directorio (si aún no existe! Rules y dentro de él, la clase para definir la regla de validación.

La clase creada implementa la interfaz Illuminate\Contracts\Validation\Rule por tanto, se requiere de los métodos passesmessage.

passes es el método que determina si la regla de validación pasa. Recibe dos parámetros: $attribute que es el nombre del atributo que se está evaluando y $value el valor que se va evaluar con la regla.  Este método debe devolver un booleano que indique si elementos pasados cumplen o no con la regla de validación.

message es el método que devuelve el mensaje de error en caso que no se cumpla la regla de validación. Recuerda que puedes usar el helper trans con el componente de traducciones para hacer tu aplicación multi-idioma como lo explicamos en el tutorial Cómo usar el componente de traducciones de Laravel.

Adicionalmente, esta clase tiene un constructor que nos permite inyectar alguna dependencia que nos ayude a definir la regla. En caso de no tener ninguna puedes eliminarlo de la clase.

Uso de la regla creada

Luego de crear la regla y completar los métodos ya está lista para ser usada en la validación de una petición. Por ejemplo haciendo uso del nuevo método validate del objeto request visto en la lección Nueva forma de validar peticiones y obtener datos en Laravel 5.5 podemos hacer algo como lo siguiente:

request()->validate([
    'bio' => new RealText(),
]);

En caso de tener varias reglas junto con una regla personalizadas para un mismo atributo usamos la sintaxis de array, es decir, cada regla es un item del array de esta manera:

request()->validate([
    'bio' => [
        'required',
        new RealText(),
    ]
]);

Prueba unitaria

Para escribir una prueba unitaria que nos garantice que la regla está funcionado correctamente, creamos primero la clase:

php artisan make:test RealTextRuleTest --unit

Le indicamos la opción --unit para que cree la clase en el directorio tests/Unit

Como la regla de validación personalizada no es más que una clase entonces en la prueba instanciamos la clase y llamamos al método passes enviándole como argumento los posibles valores (segundo argumento) que prueben si está funcionando bien la regla, es decir, valores cuando debe dar verdadero y valores cuando debe retornar falso.

Si quieres aprender más sobre desarrollo con pruebas unitarias, te recomendamos nuestro curso Crea una aplicación con Laravel.

Puedes aprender a crear alias con nuestro tutorial Alias de comandos para la consola Windows/Linux/Mac

Actividad

Anímate a diseñar un formulario que le permita al usuario actualizar su perfil y compartirlo a través de los comentarios o en Slack si formas para de nuestra comunidad.

Material relacionado

Ú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 Manejo de excepciones en las pruebas en Laravel 5.5 Lección siguiente Package Discovery en Laravel 5.5