Comparte en Facebook Twitter Google+

banner Validación de Checkbox con Form Requests en Laravel

Los Form Requests en Laravel, son clases que permiten validar formularios muy fácilmente, utilizando una serie de reglas para verificar si los campos enviados por el usuario cumplen con los criterios requeridos por la aplicación. Hoy hablaremos de como validar arrays y checkboxes usando un FormRequest.

Creando un nuevo Form Request

Para generar un Form Request, ejecuta desde la consola el siguiente comando:

Esto creará una nueva clase llama RegisterUserRequest dentro del directorio app\Http\Requests donde podremos agregar las reglas de validación necesarias:

Para no obtener un error de autorización, cambia el método authorize para que retorne true en vez de false.

Trabajando con checkboxes

Digamos que queremos almacenar en nuestra base de datos un campo “skills” que será un campo de texto con valores separados por comas. El formulario tendrá una lista de checkboxes que le permitirá al usuario seleccionar una o más opciones:

Para ver el resultado, agregaremos lo siguiente en el archivo de rutas de la aplicación:

Debido a que en el formulario anterior llamamos igual a todos los checkboxes, al enviar el formulario veremos únicamente el valor de un solo checkbox seleccionado por el usuario:

Pero en este caso queremos enviar todos los que el usuario ha seleccionado, para ello simplemente cambiamos el nombre del campo skills a skills[], esto permitirá capturar la data de todos estos campos dentro de un array. De tal manera, que si seleccionamos todos las opciones y enviamos el formulario, el resultado sería algo similar a esto:

Validación de arrays con un Form Request

Para prevenir que los usuarios cambien el código HTML desde el navegador y puedan enviar valores distintos a los esperados por la aplicación, podemos validar de la siguiente manera:

Si agregamos un nuevo campo al formulario, por ejemplo:

Obtendremos un error al tratar de enviar el formulario, ya que el valor “ruby” no está dentro de los valores validos:

Puedes cambiar el mensaje de error editando el array “custom” dentro del archivo lang/{lang}/validation.php:

En tal caso el resultado será algo como:

Si quisieras validar uno a uno los checkboxes, puedes agregar un key al nombre de los campos en el formulario:

De esta manera puedes validar cada campo por separado:

Por supuesto es mucho más conveniente utilizar la validación de array de Laravel.

Convirtiendo el array en un string

Seguramente quieras almacenar estos datos en una columna de tu base de datos utilizando Eloquent, para convertir este array antes de guardar el registro puedes usar un “Mutator” desde el modelo.

Por ejemplo, si trabajas con el modelo User.php y quieres almacenar el campo skills puedes agregar el siguiente metodo a app/User.php

La convención para los Mutators es set{fiel_name}Attributte($value)

Este código se ejecuta justamente al momento de asignar los skills antes de guardar el registro.

Material relacionado

Suscríbete a nuestro boletín

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

Regístrate hoy en Styde y continua mejorando tus habilidades: ver planes.