Laravel 当其他属性为 null 时验证 'different' 失败

Laravel validation 'different' fails when other attribute is null

您好,我在 different 验证方面遇到了问题。

我有 2 个可以为空的变量。我想要实现的是,只要变量存在,就强制它具有恰好 5 位数字并且不具有相同的值。

这些是我设定的规则:

'zip_departure' => 'nullable|digits:5',
'zip_arrival' => 'nullable|different:zip_departure|digits:5',

问题是当我将 zip_departure 设置为 null 时,它会抛出一个验证错误,指出两个参数不能具有相同的值。但是如果我 dd() 他们有两个变量:

'zip_departure': null
'zip_arrival': '28100'

我在这里错过了什么?

我正在使用 Laravel 5.6

试试这个代码

'zip_departure' => 'bail|nullable|digits:5',
'zip_arrival' => 'bail|nullable|required_with:zip_departure|different:zip_departure|digits:5',

保释是为了:在第一次验证失败后停止运行验证规则

Laravel Validation Rule

required_with 用于:验证中的字段必须存在,并且仅当任何其他指定字段存在时才不为空。

Laravel Validation Rule

希望这对您有所帮助...

从 Laravel 5.6 开始,验证器明确检查另一个值是否不为空。

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; 
        } 
    }
}

framework/src/Illuminate/Validation/Concerns/ValidatesAttributes.php:432

这就是 different:var2 有效而 different:var1 无效的原因。


从 Lravel 5.8 及更高版本开始,这是 fixed