LaravelのGETをリクエストクラスで受け取らない時でもバリデーションしたい

ルートの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で配列に追加して、ルールを作ってバリデーションを行うというやり方で実現できます。分かりやすくて手っ取り早いのはこのやり方です。

スポンサーリンク

この記事が気に入ったら
フォローしよう

最新情報をお届けします

Twitterでフォローしよう

おすすめの記事