laravelのバリデーションでは入力値に応じてチェック方法が動的に変わるバリデーションルールがある。
例えば size とか between なんかがそう。
自分が使っているのはlaravel4だけど、laravel5でもそれほど違いはないはず。
laravel4( http://readouble.com/laravel/4/2/0/ja/validation.html )より
between
フィールドが指定された最小値と最大値の間のサイズであることをバリデートします。sizeルールと同様の判定方法で、文字列、数値、ファイルは評価されます。
size
フィールドは指定された値と同じサイズであることをバリデートします。文字列の場合、値は文字長です。数値項目の場合、値は整数値です。ファイルの場合、値はキロバイトのサイズです。
これを見る限り対象のデータが数字(数値)なら値の範囲、文字列なら文字数をチェックしてくれるものだと思っていた。
つまり、
「3」という値に対して「 between:1,2 」とかいうルールを充てるとバリデーションエラーとなるものだと思っていた。
が、エラーにはならない。。。
laravelのバグだと思っていたのだけれども、コードを見ていると評価対象が数値かどうかは同時に充てられているルールを見て決めているらしい。
なので between と同時に numeric や integer を同時に設定すると期待通り動作しました。
phpは型に対してすごくゆるゆるなのでこう判定せざるを得ないという事かな。