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