Laravel 5.6:被比较的值必须是相同的类型



我们最近将Laravel从5.5升级到5.6我有验证规则:

return [
'min_price' => ['numeric', 'nullable', 'min:0'],
'max_price' => ['numeric', 'nullable', 'min:0', 'gt:min_price'],
]

如果

  1. 最小价格=零,最大价格=100
  2. 最小价格=0,最大价格=99.99
  3. 最小价格=12.50,最大价格=100
  4. 最小价格=12.50,最大价格=空上面写着:
ERROR: The values under comparison must be of the same type "exception":"[object] (InvalidArgumentException(code: 0): The values under comparison must be of the same type at vendor/laravel/framework/src/Illuminate/Validation/Concerns/ValidatesAttributes.php:1659)
[stacktrace]
#0 vendor/laravel/framework/src/Illuminate/Validation/Concerns/ValidatesAttributes.php(849): Illuminate\Validation\Validator->requireSameType(12.50, 100)

它说,两个字段应该具有相同的类型,所以它不能比较integer和float,也不能忽略可为null的字段。问题在于性状ValidatesAttributes中的方法validateGtvalidateLtvalidateGtevalidateLte。有没有一些方法可以扩展或覆盖这个特性?

由于没有明显的解决方案,我决定创建自己的验证器,不使用Laravel提供的验证器:

class ServiceProvider extends BaseServiceProvider
{
public function boot()
{
ValidatorFacade::extend('greater_than', Validator::class.'@validateGreaterThan');
ValidatorFacade::replacer('greater_than', function ($message, $a, $b, $parameters) {
$attributes = trans('validation.attributes');
$other = $parameters[0];
$other = isset($attributes[$other]) ? $attributes[$other] : $other;
return str_replace(':field', $other, $message);
});
}
public function register()
{
}
}

并将其用于像这样的验证规则

return [
'min_price' => ['numeric', 'nullable', 'min:0'],
'max_price' => ['numeric', 'nullable', 'min:0', 'greater_than:min_price'],
]

相关内容

  • 没有找到相关文章

最新更新