フォームなどを使い、データを送信する場合その値が正しい形式で書かれているかどうかを検証する必要があります。これが「バリデーション」です。
この記事ではLaravelに搭載されているバリデーションの仕組みを理解し、基本的な値のチェックができるように解説致します。
ユーザー入力時の問題
ユーザーと情報をやり取りするようなアプリケーション等を作成する場合、重要になるのはユーザーに正しい値を用意してもらうことです。
通常、ユーザーが情報を入力する場合はフォームが多様されていますが、このフォームを使用して送信された情報をそのまま利用すると、問題を引き起こす恐れがあります。
ユーザーはこちらの意図通りの入力をしてくれるとは限りません。
時には間違った値を入力する人、意図的に正しくない情報を入力する人もいます。
こうした問題を未然に防ぐのが「バリデーション」です。
バリデーションとは
バリデーションとは、入力情報を検証するための仕組みです。Laravelでは様々なやり方で値の検証を行うことができます。最も簡単なのはコントローラのvalidateメソッドを使用する方法です。
こちらは普段使用しているコントローラの基底クラスに組み込まれているValidationRequestというトレイトに用意されている機能になります。
このvalidateは、アクションメソッドから以下のように呼び出します。
1 |
$this->validate($request, [ 検証設定の配列 ] ); |
リクエストは第一引数に、検証する設定情報の配列をまとめたものは第二引数に用意します。
フォームの各項目ごとに、割り当てる検証ルールをこうして配列にまとめたものをvalidateメソッドの引数に用意すればよいのです。
バリデーションを使用する
実際にバリデーションがどのように使用されているかこちらで解説致します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
@section('content') <p>{{$msg}}</p> <table> <form action = "/laravel" method="post"> {{ csrf_field() }} <tr><th>name:</th><td><input type="text" name="name"</td></tr> <tr><th>age:</th><td><input type="text" name="age"</td></tr> <tr><th>email:</th><td><input type="text" name="email"</td></tr> <tr><th></th><td><input type="submit" value="send"</td></tr> </form> </table> @endsection |
今回は、色んなパターンで検証していきたいので、name,age,mailといった3パターン用意しました。
コントローラ側の修正
コントローラ側にバリデーションを利用するアクションを作成しましょう。ここでは、/laravelへのget/postのアクセスを行うメソッドを2通り用意します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
class LaravelController extends Controller { public function index(Request $request) { return view('laravel.index',['msg']=>'フォームを入力してください。:']); } public function post(Request $request) { $validate_rule = [ 'name' => 'required', 'age' => 'numeric|between:0,120', 'email' => 'email', ]; $this->validate($request, $validate_rule); return view('laravel.index',['msg'=>'正しい値で入力されました']; } } } |
indexメソッドでは、msgという値を用意してviewを呼び出しています。バリデーションの処理を行っているのはpostメソッドです。フォームにPOST送信された時の処理になります。
次はルート情報の記述です。
1 2 |
Route::get('laravel', 'laravel', 'LaravelController@index'); Route::post('laravel', 'LaravelController@post'); |
入力できましたら、/laravelにアクセスして、フォームに値を入力して送信してみてください。フォームを全て入力し、送信できましたら「正しい値で入力されました」というメッセージが出力されます。
もし、何か問題があった場合は、メッセージは表示されずに、フォームだけが表示されるでしょう。