参考図書
フォームのバリデーションをコントローラに書くのもあまりクールではない。
Laravelにはバリデーションをまとめて処理できる「フォームリクエスト」という機能を用意した。
LaravelはクライアントからのリクエストはRequestクラスのインスタンスとして送られてくる。
このRequestを継承して作成されたのが「FormRequest」。これを利用することでフォームに関する機能をリクエストに組み込むことができる。
フォームリクエストの流れ
①クライアントからのリクエスト
②フォームリクエストでバリデーション
③コントローラでの処理
④レスポンス
③で行っていたバリデーションを②でできる。
フォームリクエストの作成
php artisan make:request HelloRequest
HTttp/RequestにHelloRequest.phpが作成される。
フォームリクエストは基本的に当該フォルダ内に配置。
HelloRequestのコード
HTttp/Request/HelloRequest.php
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class HelloRequest extends FormRequest
{
public function authorize()
{
if($this->path() == 'hello'){
return true;
}else{
return false;
}
}
public function rules()
{
return [
'name' => 'required',
'mail' => 'email',
'age' => 'numeric|between:0,150',
];
}
public function messages()
{
return [
'name.required' => '名前は必ず入力してください。',
'mail.email' => 'メールアドレスが必要です。',
'age.numeric' => '年齢を整数で記入ください。',
'age.between' => '年齢は~150の間で入力ください。'
];
}
}
authorize
フォームのリクエストを利用するか否かのアクション。
trueで許可、falseで不許可
rules
適用されるバリデーションの検証ルールを設定する。
messages
エラーメッセージをオーバーライドできる
アクションを修正する
/app/Http/Controllers/HelloController.php
use App\Http\Requests\HelloRequest;
public function post(HelloRequest $request){
return view('hello.index', ['msg'=>'正しく入力されました!']);
}
メソッドの引数でフォームリクエストのクラスを指定。これでHelloRequestに設定した内容を元にバリデーションが実行されるようになる。