GTMeteoro
Estoy tratando de crear una validación de actualización de usuario a través del formulario, donde paso, por ejemplo, ‘contraseña’ => NULL, o ‘contraseña’ => ‘nueva’;
Estoy tratando de hacer que se valide SOLO si se pasa como no nulo, y nada, ni siquiera ‘a veces’ funciona:/
Estoy tratando de validar como:
Validator::make(
['test' => null],
['test' => 'sometimes|required|min:6']
)->validate();
Pero no se valida.
Tal vez estabas buscando ‘anulable’?
'test'=> 'nullable|min:6'
nixxx
Aunque la pregunta es un poco antigua, así es como debes hacerlo. No necesitas esforzarte tanto, con tanto código, en algo tan simple.
Necesita tener ambos anulables y, a veces, en la regla de validación, como:
$this->validate($request, [
'username' => 'required|unique:login',
'password' => 'sometimes|nullable|between:8,20'
]);
Lo anterior validará solo si el campo tiene algún valor, e ignorará si no lo tiene, o si pasa nulo. Esto funciona bien.
sumar
No pase ‘requerido’ en el validador
Validar como abajo
$this->validate($request, [
'username' => 'required|unique:login',
'password' => 'between:8,20'
]);
El validador anterior aceptará la contraseña solo si está presente, pero debe tener entre 8 y 20
Esto es lo que hice en mi caso de uso.
case 'update':
$rules = [
'protocol_id' => 'required',
'name' => 'required|max:30|unique:tenant.trackers'.',name,' . $id,
'ip'=>'required',
'imei' => 'max:30|unique:tenant.trackers'.',imei,' . $id,
'simcard_no' => 'between:8,15|unique:tenant.trackers'.',simcard_no,' . $id,
'data_retention_period'=>'required|integer'
];
break;
Aquí el rastreador puede o no tener un número de tarjeta SIM, si está presente, tendrá entre 8 y 15 caracteres incorrectos.
Actualizar
si aún desea pasar el valor ‘NULL’ codificado, agregue lo siguiente en el validador
$str="NULL";
$rules = [
password => 'required|not_in:'.$str,
];
-
él está enviando nulo a propósito si el campo está vacío. por lo que su respuesta no funciona! Esa fue mi primera respuesta, así que la actualicé.
– lewis4u
18 de febrero de 2017 a las 20:23
-
Cierto, pero él no está usando laravel como lo hacen todos los demás… está enviando todos los valores a pesar de que no están poblados… así que con su solución nulo se valida y no tiene más de 6 chars y muestra un error de validación!!!
– lewis4u
18 de febrero de 2017 a las 20:27
-
Bueno, es un problema OP, y el tuyo también. El estilo de Laravel siempre es así… eres libre de votar negativamente 🙂
– sumisión
18/02/2017 a las 20:30
-
No me estás leyendo. ¡En laravel, si lo usa por la documentación, los campos de entrada vacíos no se envían con la solicitud! ¡Pero el OP lo ha personalizado para enviar un valor nulo cuando el campo de entrada está vacío! Y si configura la regla para verificar cualquier cosa: por ejemplo
min:6
verificará el valor nulo en ese campo y el valor nulo no tiene suficientes caracteres y arrojará un error de validación.– lewis4u
18 de febrero de 2017 a las 20:32
-
Obviamente es un principiante, pero yo también… se le ocurrirá con el tiempo 😉 (si continúa usando Laravel)
– lewis4u
18 de febrero de 2017 a las 20:48
creo que estas buscando filled
.
https://laravel.com/docs/5.4/validation#rule-filled
Las reglas de validación relevantes son:
- requerido
- a veces
- anulable
Todos tienen sus usos y se pueden consultar aquí:
https://laravel.com/docs/5.8/validation#rule-required
si quieres que la validación sea siempre aplicar
https://laravel.com/docs/5.8/validation#conditionally-adding-rules
si desea aplicar reglas de validación a veces
https://laravel.com/docs/5.8/validation#a-note-on-opcional-campos
si quieres que tu atributo permitir nulo como valor también
O usas
sometimes
orequired
. Son mutuamente excluyentes. Si solo usa a veces, se validará si no está vacío.– Marco Aurelio Deleu
18 de febrero de 2017 a las 18:58
Si pero
sometimes
también hace que la prueba falle si el valor se pasa como NULL:/ Supongo que el problema radica en pasar valores NULL…– GTMeteoro
18 de febrero de 2017 a las 19:45