Validación de Laravel uno de los dos campos debe ser llenado

2 minutos de lectura

avatar de usuario
imperium2335

Tengo dos campos:

qq

Correo electrónico

¿Cómo configuro un objeto Validador para que se deba completar uno de estos campos? No importa cuál.


$messages = array(
    'email.required_without:qq' => Lang::get('messages.mustenteremail'),
    'email.email' => Lang::get('messages.emailinvalid'),
    'qq.required_without:email' => Lang::get('messages.mustenterqq'),
);

required_without Deberia trabajar.

Significa que el campo es obligatorio si el otro campo no está presente. Si tiene más de dos campos y solo uno es obligatorio, utilice required_without_all:foo,bar,...

$rules = array(
    'Email' => 'required_without:QQ',
    'QQ' => 'required_without:Email',
);

  • No del todo seguro. Prefiero pensar que es solo email.required_without sin el parámetro de regla real, pero tendrá que probar…

    – lukasgeiter

    10 de enero de 2015 a las 11:11

  • Es sin, lo que parece un poco limitante 🙁

    – imperium2335

    10 de enero de 2015 a las 11:34

  • ¿Por qué es eso limitante? ¿Solo puede usar la misma regla una vez en el mismo campo de todos modos?

    – lukasgeiter

    10 de enero de 2015 a las 11:35

  • Quiero arrojar un error solo cuando ambos campos están ausentes. ¿Qué debería hacer? Debería funcionar cuando ambos campos están presentes.

    – Dinesh Gowda

    10 de mayo de 2018 a las 12:08

  • Encontré esa documentación un poco extraña. Gracias por señalar esto con un ejemplo.

    –Alwin Kesler

    27 de julio de 2018 a las 19:56

En el ejemplo anterior (dado por lucasgeiter) en realidad solo necesita una de las condiciones, no ambas.

$rules = array(
    'Email' => 'required_without:QQ'
);

Si tiene ambas reglas, no completar ninguna hará que se muestren DOS mensajes de error. De esta manera, comprobará que al menos un campo esté lleno y solo mostrará un mensaje de error si ninguno está lleno.

  • Este es un muy buen punto. Haciendo o campo obligatorio cuando el otro está vacío activará el error cuando ambas cosas están perdidos. Agregar un mensaje de error personalizado que no hace referencia al :attribute que desencadenó el error de validación será importante al hacer esto.

    – Jasón

    12 de mayo a las 15:06

Laravel >= 8.32 solo soporte.

Ambos (móvil o correo electrónico) se presentan simultáneamente -> a través de un error.

Ambos (móvil o correo electrónico) no están presentes simultáneamente -> por un error.

Permitió

Solo se puede permitir un parámetro.

'email'  =>  [ 'prohibited_unless:mobile,null,','required_without:mobile','email', 'max:255', ],
'mobile' =>  [ 'prohibited_unless:email,null','required_without:email', 'digits_between:5,13', 'numeric' ],

¿Ha sido útil esta solución?