Estoy validando una solicitud en Laravel 5.4 con el validador, consulte la documentación: https://laravel.com/docs/5.4/validation#validating-arrays
Básicamente, es este código en el Controlador:
public function createSomeResource(Request $request) { $this->validate($request, [ 'items' => 'required', ]; ... }Me gustaría requerir la presencia del campo "elementos" y este código lo hace, pero el problema es que la validación falla cuando el campo "elementos" es una matriz vacía, es decir
{ "fields": [] }, que es un comportamiento no deseado. Sé que ese es el comportamiento documentado del parámetro "requerido", pero no veo ninguna solución "limpia". Probé también:
public function createSomeResource(Request $request) { $this->validate($request, [ 'items' => 'required_unless:items,[]', ]; ... }pero también falla, probablemente porque la documentación dice que funciona con un campo diferente después de la cláusula "required_unless", pero no estoy totalmente seguro de ello.
¿Podría sugerirme una forma de requerir la presencia del campo "elementos" sin prohibir la matriz vacía?
EDITAR: otro enfoque "obvio" que me ha venido a la mente es usar la regla "presente | matriz" y casi hace lo que quiero, pero desafortunadamente, una cadena vacía también pasa esa regla de validación, lo que tal vez sea un error en Laravel, tal vez no: abrí un problema en el repositorio de Laravel github: https://github.com/laravel/framework/issues/18948
Prueba esto:
public function createSomeResource(Request $request) { $this->validate($request, [ 'items' => 'present|array', ]; ... }Probar:
public function createSomeResource(Request $request) { $this->validate($request, [ 'items' => 'required|array|min:1', ]; ... }Del documento de Laravel:
min:value El campo bajo validación debe tener un valor mínimo. Las cadenas, los valores numéricos, las matrices y los archivos se evalúan de la misma manera que la regla de tamaño.
1) Se requiere matriz
2) El valor de toda la matriz no es nulo ni está vacío
public static $rules = [ 'category' => 'required|array|min:1', 'category.*' => 'required', ];