我试图在我的 Controller 中为我的请求设置验证,我试图弄清楚如何让地址、城市、州、 zip 相互依赖,如果有一个值,那么必须是所有这些的值,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'
最佳答案
required_with
和 required_with_all
不要按照你解释它们的方式工作。 required_with_all
如果 ,则表示此字段是必需的以下所有字段有值(value)观。例如,required_with_all:address,state,zip
意思是“如果地址和州和 zip 都有值,则需要城市”。
您正在努力实现:
address
有一个值,city
, state
和 zip
需要address2
有一个值,address
需要 city
有一个值,address
, state
和 zip
需要state
有一个值,address
, city
和 zip
需要zip
有一个值,address
, city
和 state
需要您正在寻找的规则是
required_with
但逻辑是不同的。您可以有效地使用 required_with
通过 anchor 定在一个字段上来进行规则,例如: anchor 定于 address
并且您的英语规则可以是“如果 address
具有值,则需要城市、州和 zip ,或者如果 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'
]);
而对于
address2
您的规则是“如果 address
具有值,则需要 address2
”(这将导致 state
、 city
和 zip
也需要)。这再次使用 required_with
构建, 我们设置 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'
]);
编辑:此答案的先前版本中存在错误,现已修复。
关于Laravel 验证 required with,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48482478/