Laravelでのバリデーション処理メモ その2(フォームリクエスト)
フォームリクエストを利用したバリデーション
Laravelのフォームリクエストという機能を利用することで、コントローラーからバリデーション処理を切り離すことができます。
フォームリクエストを利用すると、リクエスト内部でバリデーション処理を実行してくれます。
フォームリクエストを作成する
php artisan make:request HogeRequest
以下にファイルが作成されます。
/Http/Requests/HogeRequest.php
フォームリクエストのコード
作成したフォームリクエストのファイルは以下の感じです。
<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class HogeRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return false; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ // ]; } }
authorize
フォームリクエストの利用の可否を示すものです。 true
が返却されれば利用可能。flase
が返却されると利用不可になります。
rules
バリデーションのルールを設定します。
バリデーションを追加してみる
/hoge
にアクセスした場合に実行するようにします。 バリデーションルールはControllerに定義するのと同じ形で定義します。
◎/Http/Requests/HogeRequest.php
<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class HogeRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { if($this->path() == 'hoge'){ return true; }else{ return false; } } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'name' => 'required', 'mail' => 'email', 'age' => 'numeric|between:0,100', ]; } }
◎/Http/Controllers/HogeController.php
postの箇所をHogeRequest
に変更します。
<?php namespace App\Http\Controllers; use App\Http\Requests\HogeRequest; use Illuminate\Http\Request; class HogeController extends Controller { public function index(Request $request) { return view('hoge.index',['msg'=>'入力']); } public function post(HogeRequest $request) { return view('hoge.index',['msg'=>'入力成功!']); } }
バリデーションが実行されます。
エラーメッセージのカスタマイズ
バリデーションのエラーメッセージはデフォルトは英語です。 フォームリクエストを利用してカスタマイズすることができます。
◎/Http/Requests/HogeRequest.php 以下のmessages
メソッドを追加します。
public function messages() { return [ 'name.required' => '名前は必須入力項目です。', 'mail.email' => 'メールアドレを入力してください。', 'age.numeric' => '数値で入力してください。', 'age.between:0,100' => '0〜100の間で入力してください。' ]; }
設定したメッセージが表示されます。