需要的Laravel验证

use*_*216 1 laravel laravel-5.3

我正试图在我的控制器中为我的请求设置验证,而我正在试图弄清楚如何将地址,城市,州,拉链全部依赖于彼此,只要它有一个值,那么必须作为所有这些的值,address2是唯一独立的,但仅取决于地址.出于某种原因,这不起作用.例如,如果提交了城市,则验证通过.所以我不太明白我做错了什么.

'address' => 'required_with_all:city,state,zip|string|nullable',
'address2' => 'required_with:address|string|nullable',
'city' => 'required_with_all:address,state,zip|string|nullable',
'state' => 'required_with_all:address,city,zip|string|size:2|nullable',
'zip' => 'required_with_all:address,city,state|integer|digits:5|nullable'
Run Code Online (Sandbox Code Playgroud)

sam*_*sam 9

required_with并且required_with_all不要以你解释它们的方式工作.required_with_all表示如果以下所有字段都具有值,则此字段是必需的.例如,required_with_all:address,state,zip表示"如果地址和状态以及zip都具有值,则需要城市".

你想要实现:

  • 如果address有一个值,city,statezip需要
  • 如果address2有值,address则是必需的
  • 如果city有一个值,address,statezip需要
  • 如果state有一个值,address,cityzip需要
  • 如果zip有一个值,address,citystate需要

你正在寻找的规则 required_with但逻辑是不同的.您可以required_with通过锚定在一个字段上来有效地使用规则,例如:锚定,address并且您的英语规则可以是"如果address有值,则需要城市,州和邮政编码,或者是否city,state或者zip需要具有值address",可以构造为:

$this->validate($request, [
    'address' => 'required_with:city,state,zip|string|nullable',
    'city' => 'required_with:address|string|nullable',
    'state' => 'required_with:address|string|size:2|nullable',
    'zip' => 'required_with:address|integer|digits:5|nullable'
]);
Run Code Online (Sandbox Code Playgroud)

并且对于address2你的规则是" address如果address2有一个值则需要"(它将级联到导致state,city并且zip也是必需的).这是使用再构建required_with,我们设置required_withaddress:

$this->validate($request, [
    'address' => 'required_with:city,state,zip,address2|string|nullable',
    'address2' => 'string|nullable',
    'city' => 'required_with:address|string|nullable',
    'state' => 'required_with:address|string|size:2|nullable',
    'zip' => 'required_with:address|integer|digits:5|nullable'
]);
Run Code Online (Sandbox Code Playgroud)

编辑:此答案的先前版本中存在错误,现在已修复.