Laravel: проверка числа больше нуля не удалась - PullRequest
0 голосов
/ 19 сентября 2018

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

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

Проблема заключается в том, что при вводе строки в 'product_price'Я получаю сообщение об ошибке:

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

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

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

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. Итак, сочетание обоих этих правил делает свою работу.

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

0 голосов
/ 19 сентября 2018

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

Прежде чем вызывать функцию 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']);
...