
ルートのURLにGETパラメータ書いたりする場合、リクエストクラスにデータが入らないのでバリデーションが効かなくて困るという人が見るページです。どゆこと?
Route::get('/url/{approval}', controller@method);
こんなケースで、Controllerのメソッド動かした場合にバリデーションするにはどうしたら良いのかを書いていきます。
よろしくおねがいします。
バリデーションは配列に対して行う
他の人のLaravelのバリデーションの実装を見てると、リクエストクラスをバリデーションかけるわけでなくて、リクエストクラスのallメソッドから取得した配列に対してバリデーションしています。
なので、配列に対してバリデーションがかけられるということなので、allメソッドで取得した配列にパラメータ突っ込んでやれば良いのです。
GETパラメータを受けるControllerへの実装例
前提となる考え方を理解頂いたところで、実装例を出します。
class TestController extends Controller { public function testvalidation(Request $request,$p1,$p2) { $req = array_merge($request->all(), [ 'p1' => $p1, 'p2' => $p2 ]); $rules = [ 'p1' => [ 'required','min:1','numeric' ], 'p2' => [ 'required','min:1','numeric' ], ]; $validator = \Validator::make($req, $rules); } }
array_mergeで配列に追加して、ルールを作ってバリデーションを行うというやり方で実現できます。分かりやすくて手っ取り早いのはこのやり方です。