Laravel验证必须填写两个字段之一

imp*_*335 26 php validation laravel laravel-4

我有两个领域:

QQ

电子邮件

如何设置Validator对象以便必须填充其中一个字段?哪个没关系.


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

luk*_*ter 56

required_without 应该管用.

这意味着如果不存在其他字段,则该字段是必需的.如果有两个以上的字段且只需要一个,请使用required_without_all:foo,bar,...

$rules = array(
    'Email' => 'required_without:QQ',
    'QQ' => 'required_without:Email',
);
Run Code Online (Sandbox Code Playgroud)


oma*_*ari 13

在上面的例子中(由lucasgeiter给出)你实际上只需要其中一个条件而不是两个条件.

$rules = array(
    'Email' => 'required_without:QQ'
);
Run Code Online (Sandbox Code Playgroud)

如果您同时具有这两个规则,则既不填写将导致显示两条错误消息.这样它将检查是否填写了至少一个字段,并且如果两个字段都未填充,则仅显示一条错误消息.


小智 7

仅 Laravel >= 8.32 支持。

两者(移动设备或电子邮件)同时呈现 -> 抛出错误。

两者(手机或电子邮件)不同时出现 -> 抛出错误。

允许

只能允许一个参数。

'email'  =>  [ 'prohibited_unless:mobile,null,','required_without:mobile','email', 'max:255', ],
'mobile' =>  [ 'prohibited_unless:email,null','required_without:email', 'digits_between:5,13', 'numeric' ],
Run Code Online (Sandbox Code Playgroud)

编辑:您还可以使用prohibits:emailandprohibits:mobile结合required_without:...规则