web-dev-qa-db-ja.com

Laravel:ゼロより大きい数値の検証が失敗します

ゼロより大きくする必要がある(0.01が有効)価格フィールドを検証する必要があるため、次の検証が必要です。

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

問題は、「product_price」フィールドに文字列を入力するとエラーが発生することです。

InvalidArgumentException比較対象の値は同じ型である必要があります

何故ですか?つまり、0より大きいことを確認する前に、数値であることを確認しています

5
MrCujo

gtgtelt、およびlteがLaravel 5.6以降のバージョンに追加されました。エラーが発生する理由である必要があります(しかし、それは私のために働いています)。

私はあなたがこのように試すことができると思います

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

min:0最小値が0であり、負の値が許可されていないことを確認してください。 not_in:0値が0であってはならないことを確認してください。したがって、これらのルールの両方を組み合わせることにより、仕事ができます。

特定のルールに対して意味のあるエラーメッセージを定義できます。 (正規表現を使用しても同じ結果を得ることができます。)

23
TharinduLucky

あなたはこの方法を試すことができます、

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']);
2
Mayank Majithya

私にとって、このコードは私のプロジェクトで機能しています。

$validation_rules = array( 
                'user_id' => 'required|integer|gt:0',
                'type_id' => 'required|integer|gt:0',
            );
$validation = Validator::make($request->all(), $validation_rules);

ここで、gt:0は整数がゼロより大きいかどうかを確認します。

これがあなたのために働くことを願っています。そうでない場合は、Laravel=バージョンを確認してください。

0
Chandan Sharma