我很难理解此验证规则。基本上,我有两个字段,它们都是nullable
。但是,一旦两个字段都填满,它们就必须彼此不同。例如,我不能同时输入test
。如果我填写both
字段,则此验证规则有效。
但是,当我仅填写one
个字段时,验证失败,并显示以下消息,说明这些字段应该彼此不同:
The name and replace must be different.
我检查了正在提交给表单请求的内容,这是以下内容:
"name" => null
"replace" => "test"
我的验证规则的简化版本:
public function rules()
{
return [
'name' => 'different:replace|nullable',
'replace' => 'different:name|nullable',
];
}
有人可以向我解释我对该验证规则的误解吗? null
值不计入该规则吗?
答案 0 :(得分:1)
如果您查看 Illuminate \ Validation \ Concerns \ ValidatesAttributes (供应商/ laravel /框架/ src / Illuminate / Validation / Concerns / ValidatesAttributes.php:432 )规则:
public function validateDifferent($attribute, $value, $parameters)
{
$this->requireParameterCount(1, $parameters, 'different');
foreach ($parameters as $parameter) {
$other = Arr::get($this->data, $parameter);
if (is_null($other) || $value === $other) {
return false;
}
}
return true;
}
如您在if情况下所见,如果另一个值为null,则该规则将失败。
if (is_null($other) || $value === $other)