我试图在我的控制器中为我的请求设置验证,并且我试图找出我的地址,城市,州,拉链如何相互依赖,如果有的话#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'
答案 0 :(得分:6)
required_with
和required_with_all
不能按照您解释它们的方式工作。 required_with_all
表示如果所有以下字段都有值,则此字段是必需的。例如,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
规则,例如:锚定address
,而您的英语规则可以是“if 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'
]);
对于address2
address
,如果address2
具有值“(将会导致state
,city
和{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
编辑:此答案的先前版本出现错误,现在已修复。