私が使用しているLaravelのバージョンは5.5、ついこの前にリリースされたと思いきや、なんと8/30/2017のことらしくもう1年半以上も経過。LTSということで2年間の長期サポートだからのんびりとしていたら、もうこの夏でサポートの期限切れです。キャッチアップ、ということで去年の2月にリリースされた5.6バージョン(しかし、もうサポートされていない)に追加されたバリデーションをチェックします。

これが、5.6のバリデーションの一覧です。ブルーでハイライトしているのが5.5にはなく5.6に追加されたバリデーションです。

追加されたもので、すぐに使えそうなものは、

Greater Than gt
Greater Than Or Equal gte
Less Than lt
Less Than Or Equal lte

早速使ってみましょう。validator()はLaravelのヘルパーですが、こちらも読んでください。

Psy Shell v0.9.9 (PHP 7.1.14 — cli) by Justin Hileman
>>> $input = ['quantity' => 5];
=> [
     "quantity" => 5,
   ]
>>> validator($input, ['quantity' => 'required|integer|gt:4'])->errors()->all();
=> []
>>> validator($input, ['quantity' => 'required|integer|gt:5'])->errors()->all();
=> [
     "The quantity must be greater than 0.",
   ]
>>> validator($input, ['quantity' => 'required|integer|gte:5'])->errors()->all();
=> []
>>> validator($input, ['quantity' => 'required|integer|lt:6'])->errors()->all();
=> []
>>> validator($input, ['quantity' => 'required|integer|lte:5'])->errors()->all();
=> []

ちなみに、これらがない5.5では、以下のようにmin, max, not_inを組み合わせて同じようなバリデーションが可能です。

>>> validator($input, ['quantity' => 'required|integer|min:5'])->errors()->all();
=> []
>>> validator($input, ['quantity' => 'required|integer|min:5|not_in:5'])->errors()->all();
=> [
     "The selected quantity is invalid.",
   ]

しかし、このメッセージでわかりにくいので、

>>> validator($input, ['quantity' => 'required|integer|min:5|not_in:5'], ['not_in' => 'The quantity must be greater than :input.'])->errors()->all();
=> [
     "The quantity must be greater than 5.",
   ]

と、カスタムメッセージを与える必要あります。面倒ですね。

By khino