En un artículo pasado vimos que son y para que sirven los Form Request de Laravel. En este artículo vamos a ver en detalle una característica importante que tienen este tipo de clases y es el método prepareForValidation.
Introducción
El método prepareForValidation es una función que podemos sobrescribir en nuestra clase Form Request y, como su nombre lo indica, nos permite manipular los datos de entrada antes que sean validados.
¿Para que necesitaría manipular los datos de entrada?
En ocasiones, nos encontramos que necesitamos validar datos que se generan dinámicamente gracias a los datos de entrada y sería una mala practica preparar los datos en el método rules (por ejemplo). Por este motivo es que existe el método prepareForValidation(). Vamos a ver un ejemplo.
Ejemplo de utilización del método prepareForValidation
Un claro ejemplo donde podemos utilizar prepareForValidation es cuando necesitamos generar un slug a través de un dato de entrada como podría ser el título de un artículo.
Como pueden ver en la imagen, en el método prepareForValidation convertimos el titulo en un slug (si no sabes que es $this->input(‘title’) puedes ver el artículo La mejor forma de capturar datos POST y GET ). Y luego, agregamos el slug al array de los datos de entrada gracias al método merge(). Ya podemos agregar el campo slug en el método rules() para que sea validado. ¡Simplemente genial!
Otro ejemplo: Reemplazando datos a validar
También, tenemos la posibilidad de modificar y/o sanitizar los datos de entrada. Por ejemplo, podrías aplicar la función trim a los datos o cambiar el tipo de datos de uno de ellos:
En este ejemplo, estamos cambiando el tipo de dato del campo amount a entero. Tener en cuenta que estamos reemplazando el dato original de amount por el mismo dato de amount pero en entero.
Conclusión
Vimos que el método prepareForValidation nos permite separar el tratamiento de datos a ser validados haciendo que nuestra clase Form Request quede prolija y que cada uno de sus métodos se encarguen de su tarea. Espero que les haya gustado este Laravel Tip y nos leemos en la próxima. Saludos. 😉🤙
esta funcionalidad sigue funcionando?
Si, sigue funcionando.
Me parece excelente capturar los datos antes de llevarlos a la BBDD. Gracias.
PD: Sabrán algo del paquete cviebrock/eloquent-sluggable que descargué de packagist.org el cual me genera fácilmente los slug que necesito.
Si, conozco el paquete. Pero si tienes dudas sobre él, te recomiendo que hagas la consulta en nuestro de grupo de Facebook. Lo podes encontrar como «Hablemos de Laravel». Por otro lado, también tenemos un tutorial en laraveltip sobre como generar slugs amigables, te dejo el link: https://www.laraveltip.com/como-generar-url-amigable-en-laravel/. Saludos.