我要验证价格字段需要大于零(0.01有效),所以我有以下验证:
$request->validate([
'product_price' => 'required|numeric|gt:0',
]);
问题是,当我在'product_price'字段中输入一个字符串时,我收到一个错误:
InvalidArgumentException比较下的值必须是相同的类型
这是为什么?我的意思是,在检查它是否> 0之前,我正在检查它应该是数字
在Laravel 5.6及更高版本中添加了gt
,gte
,lt
和lte
,我猜这肯定是你得到错误的原因。 (虽然这对我有用。)
我想你可以这样试试
$request->validate([
'product_price' => 'required|numeric|min:0|not_in:0',
]);
min:0
确保最小值为0且不允许负值。 not_in:0
确保值不能为0.因此,这两个规则的组合可以完成工作。
您可以为特定规则定义有意义的错误消息。 (您也可以使用正则表达式获得相同的结果。)
你可以这样试试,
在调用Validator :: make()函数之前,通过附加要比较的值来修改规则集,如下所示:
use Illuminate\Support\Facades\Validator;
Validator::extend('greater_than', function ($attribute, $value, $otherValue) {
return intval($value) > intval($otherValue[0]);
});
$validation = Validator::make($input, ['amount' => 'required|numeric|greater_than:0']);