Mejora tus validaciones en Laravel con Form Request
Tags: laravel, php, validations
Published: 2022-03-21 13:25:13

Laravel ofrece un buen recurso para poder organizarlas de una manera más limpia y funcional.  

Seguro has visto como desarrollador que solemos codear nuestras validaciones en el controlador. Pero nuestro código crece exponencialmente y sería difícil mantenerlo, de acuerdo a los principios SOLID no debería ser así, los Form Request llegan al rescate. Extraen toda esa lógica en una clase aparte y te brinda diferentes métodos que termina en un código más mantenible y prolijo.  

Quédate, te mostraré un truco para validar todos los verbos HTTP en un solo archivo.

Empecemos creando en nuestra terminal nuestro primer Form Request 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ocbdkcx8w4ku9mckf1zo.png)

Una vez creado nos desplazamos a la carpeta en app/http/request en nuestro proyecto y lo abrimos.

Veamos el primer método


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2wuoctknqkjb8kxs2ij4.png)

Devuelve un valor booleano que por default viene en false y define la autorización si la petición del usuario debe llevar a cabo las validaciones establecidas en el Request. También puedes crear una lógica más avanzada para la autorización de ciertos procesos como la actualización, eliminación o adición de recursos. 


Método **rules**

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sf3b9yrp38nhyyvuajsy.png)

Establecerá las reglas para nuestras propiedades que vienen en la petición HTTP. Aquí es cuando le muestro un truco, cuando generamos un Form Request deberíamos generarlo por cada acción o método http, o sea FormRequestPostSale, FormRequestPutSale, etc.

Sin embargo, con tan solamente encapsularlos dentro de los métodos **match** y **method** evaluaremos qué tipo de petición hace el usuario y cuáles son las reglas a evaluar.  

Nota:
Esta función de match está presente si nada más tienes PHP 8.0 instalado en tu máquina.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7qvmu0emgr7qtuk4q86q.png)

Método **attributes**

En este particular y de manera resumida pondrás los nombre con lo que se mostrarán los mensajes de las validaciones. Algo muy identificativo para mayor compresión, entenderás más adelantes como lo utilizaremos.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1fjzwgiy2t94m6cn4lt8.png)


Método **message**
Pieza importante de los Form Request, porque define los mensajes que irían a mostrar. Cómo vemos en la imagen establecemos las reglas con los diferentes mensajes de validación  y como anticipé utilizamos nuestro **:attribute** para no repetir código. 

**_Opcional_**

Método **prepareForValidation** este método lo empleo para modificar algún parámetro del Request entrante, lo uso para hashear un password y así pasaría al controlador ya convertido y menos código en él. Pero puede hacer infinidades de modificaciones.

Los Form Request te pueden ayudar a establecer una validación fuerte y eliminar esas líneas de código del controlador. Mantener esa capa que verifica si la petición cumple con todo los parámetros ayudan que la data pase al controlador con los estándares correspondientes. Si algunas de las validaciones faltan, devolverá los errores con código 422 Unprocessed Entry.

Queda mucho por explicar este es un pequeño resumen de este gran ayuda de Laravel, si deseas profundizar más te dejo la referencia a la documentación. 

Referencias
[](https://laravel.com/docs/9.x/validation#preparing-input-for-validation)

Si te gusto el post no olvide dar like.