当其他属性为空时,Laravel验证“不同”失败

时间:2018-10-11 14:55:03

标签: validation laravel-5.6

您好,我在different验证方面遇到了麻烦。

我有2个可以为null的变量。我要实现的是,只要存在变量,就将其强制为正好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

2 个答案:

答案 0 :(得分:1)

从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

答案 1 :(得分:0)

尝试此代码

'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

希望这对您有帮助...