2018/10/12
以前、フォームにバリデーションの機能を作りました。
前回はControllerにバリデーションを定義しましたが、Requestクラスを作ってそちらにバリデーションを実装するのが王道です。
これをFormRequest機能と呼びます。
前回バリデーションをPostIndexメソッドに記述したのですが、今回はこのFormRequest機能を使ってリファクタリングの作業をしてみます。
リファクタリング・・・理解しやすい&拡張しやすいソースに書き換えること
チュートリアル
実現したいこと
- FormRequest機能を使って入力データのバリデーションを行うようにする
手順
1. ArtisanコマンドでRequestクラスを生成
Windowsのコマンドプロンプトを起動してLaravelのプロジェクトに移動します
cd C:\xampp\htdocs\mylaravel
ArtisanコマンドでRequestクラスを生成します。
php artisan make:request GreetingRequest
app/Http/Requests/GreetingRequest.phpが作成されます。
2. 生成されたRequestクラスの編集
app/Http/Requests/GreetingRequest.php を編集します。
<?php namespace App\Http\Requests; use App\Http\Requests\Request; class GreetingRequest extends Request { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { # 認証の仕組みがない場合は何でも通すという意味でtrueを設定 return true; } /** * Get the validation rules that apply to the request. * * @return array */ # バリデーションはrulesメソッドに書く public function rules() { return [ 'onamae' => 'required' ]; } }
rulesメソッドにバリデーションを設定していきます。
Controllerに記述していたバリデーションの記述をそのままここにコピペします。
3. Controllerの編集
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; #モデルを使用する use App\Greeting; #↓今回追加↓ use App\Http\Requests\GreetingRequest; class GreetingController extends Controller { : # Request ⇒ GreetingRequestに書き換える public function postIndex(GreetingRequest $request) { /* * バリデーション */ // ここでのvalidate が不要になるので消す : # Request ⇒ GreetingRequestに書き換える public function update(GreetingRequest $request,$id) { :
1) Artisanコマンドで生成したGreetingRequestクラスをインポートします。
use App\Http\Requests\GreetingRequest;
2) フォームから入力されたデータを受け取るメソッドの引数を
Request $request ⇒ GreetingRequest $request
に変更します。
3) コントローラに記述していたvalidationは不要なので消します。
これでバリデーションの実装はOKです。
エラーがあったときは自動で前画面にリダイレクトしてくれます。便利ですね。
4. 動作確認
入力フォームに空白で送信
編集フォームに空白で送信
Requestクラスのバリデーションがちゃんと動いているのが確認できます。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。