时间:2018-01-28 02:04:45

标签: laravel laravel-5.3

我试图在我的控制器中为我的请求设置验证,并且我试图找出我的地址,城市,州,拉链如何相互依赖,如果有的话#39;一个值为1然后必须有一个值为所有这些值,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'

1 个答案:

答案 0 :(得分:6)

required_withrequired_with_all不能按照您解释它们的方式工作。 required_with_all表示如果所有以下字段都有值,则此字段是必需的。例如,required_with_all:address,state,zip表示“如果地址和状态以及zip都具有值,则需要城市”。

你正在努力实现:

  • 如果address有值,则citystatezip是必需的
  • 如果address2有值,则需要address
  • 如果city有值,则addressstatezip是必需的
  • 如果state有值,则addresscityzip是必需的
  • 如果zip有值,则addresscitystate是必需的

您正在寻找的规则 required_with,但逻辑不同。您可以通过锚定在一个字段上来有效地使用required_with规则,例如:锚定address,而您的英语规则可以是“if address有值,然后是城市,州和邮政编码是必需的,或者如果citystatezip有值,则需要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'
]);

对于address2 address,如果address2具有值“(将会导致statecity和{zip,则需要required_with {1}}也需要)。这是使用required_with再次构建的,我们在address上设置了$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' ]);

componentDidCatch

编辑:此答案的先前版本出现错误,现在已修复。