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

问题描述 投票:0回答:3

我有两个领域:

QQ

电邮

如何设置验证器对象以便必须填写其中一个字段?哪个都没关系。


$messages = array(
    'email.required_without:qq' => Lang::get('messages.mustenteremail'),
    'email.email' => Lang::get('messages.emailinvalid'),
    'qq.required_without:email' => Lang::get('messages.mustenterqq'),
);
php validation laravel laravel-4
3个回答
155
投票

required_without
应该工作。

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

required_without_all:foo,bar,...

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

31
投票

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

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

如果您有两个规则,那么都不填写将导致显示两条错误消息。这样它会检查是否至少有一个字段被填写,如果两者都没有填写则只会显示一条错误消息。


3
投票

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' ],

编辑:您也可以结合使用

prohibits:email
prohibits:mobile
required_without:...
规则

© www.soinside.com 2019 - 2024. All rights reserved.