LoginSignup
1
4

More than 3 years have passed since last update.

Laravel バリデーションで変数を利用

Posted at

Laravelのバリデーションで変数の使い方

なぜ気になったのか

ECサイトを制作中に、商品をカートに追加する際にデータベース上の商品の在庫数以上の数を買い物かごに入れることができてしまう。
バリデーションを利用するときに商品の在庫数はそれぞれ異なるので固定の値は設定できない。
商品ごとにデータベースの商品の在庫数をMAXとしてそれ以上買い物かごに入れる時にはバリデーションを発動してエラーメッセージを出したかったから。

まず試したこと

$data['test'] = 5;
$max = 10;

$validator = Validator::make($data, [
            'test' => 'max:$max',
        ]);

これでは全くバリデーションは効かず

ではどうするべきか。

PHPで変数を文字列内で展開したい場合は変数を{ }(波括弧)で囲って書くことで、文字列の中に変数があること明示している。
ただし、文字列の中に変数を入れる場合は、文字列を必ず" "(ダブルクォーテーション)で囲む必要がある。
詳しくはPHPマニュアル

これを踏まえて下記で実行してみました。

$data['test'] = 5;
$max = 10;

$validator = Validator::make($data, [
            'test' => "max:{$max}",
        ]);

しかしこれでもうまくいきませんでした。

何が必要なのか。

Laravelバリデーションのmin max sizeなどを利用するときは指定されたを判断する。
そのため、上記の書き方では文字列と判断されは文字長を判断する。
詳しくはLaravel5.5 バリデーション
在庫数などの数値を判断する場合にはmaxの前に整数値であるバリデーションが必要なためintegerを記述する必要がある。

これを踏まえると下記の書き方になる。

$data['test'] = 5;
$max = 10;

$validator = Validator::make($data, [
            'test' => "integer|max:{$max}",
        ]);

細かい部分ですが、つまずいたポイントなので復習がてらにまとめてみました。

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4