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 を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。