Laravel验证规则“不同”

时间:2018-07-12 19:55:20

标签: php laravel validation

我很难理解此验证规则。基本上,我有两个字段,它们都是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值不计入该规则吗?

1 个答案:

答案 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)