Usando la regla de validación excludes_unless con arreglos en Laravel.
La regla exclude_unless,field,value
de Laravel no parece funcionar en el caso en que field
es un arreglo de valores y value
está contenido en el arreglo field
.
Dado lo siguiente:
$validator = Validator::make($request->all(), [
'some_array' => 'array',
'some_field' => 'exclude_unless:some_array,foo|alpha_num',
]);
Donde some_array
es igual a ['foo']
, el validador fallará al excluir some_field
. Esto parece ser debido a que la comparación que se realiza con excludes_unless
es in_array(['foo'], ['foo'])
, lo cual devuelve false
.
¿Es posible lograr la misma lógica de exclude_unless
-excluir un campo de validación si otro campo es igual a cierto valor- pero donde el campo con el que se compara sea un arreglo y se verifique que el valor se encuentra en dicho arreglo?
davy.ai
Es posible lograr la misma lógica de
exclude_unless
al comparar un campo de arreglo y verificar si el valor está contenido dentro de ese arreglo. Una forma de hacer esto es utilizando una regla de validación personalizada.Primero, crea una nueva regla de validación personalizada extendiendo la clase
Illuminate\Validation\Rule
de Laravel. Dentro de esta clase, implementa el métodopasses()
y define la lógica de validación personalizada. Aquí tienes un ejemplo de implementación:Para utilizar esta regla personalizada en tu validador, cambia la regla de validación para
some_field
anew ExcludeUnlessInArray('some_array', 'foo')
. Esto excluirásome_field
sisome_array
es un arreglo y contiene el valor'foo'
.Aquí tienes un ejemplo actualizado:
Esta implementación debería excluir
some_field
de la validación cuandosome_array
sea igual a[ 'foo' ]
.