Laravel: проверка числа больше нуля не удалась

Я должен проверить поле цены, которое должно быть больше нуля (действителен 0,01), поэтому у меня есть следующая проверка:

$request->validate([
'product_price' => 'required|numeric|gt:0',
]);

Проблема в том, что когда я ввожу строку в поле «product_price», я получаю сообщение об ошибке:

InvalidArgumentException Сравниваемые значения должны быть
того же типа

это почему? Я имею в виду, я проверяю, что он должен быть числовым, прежде чем даже проверить, что это> 0

1

Решение

gt, gte, lt а также lte добавлены в Laravel 5.6 и более поздних версиях, я думаю, это должно быть причиной, по которой вы получите ошибку. (Это работает для меня, хотя.)

Я думаю, что вы можете попробовать так

$request->validate([
'product_price' => 'required|numeric|min:0|not_in:0',
]);

min:0 убедитесь, что минимальное значение равно 0 и отрицательные значения не допускаются. not_in:0 убедитесь, что значение не может быть 0. Итак, комбинация обоих этих правил делает свою работу.

Вы можете определить значимые сообщения об ошибках для определенного правила. (Вы можете достичь того же результата, используя регулярные выражения.)

5

Другие решения

Вы можете попробовать так,

Перед вызовом функции 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']);
1

По вопросам рекламы [email protected]