リクエストデータをバリデーション続き(登録フォームを作る③)

前の記事で実装したバリデーションとまったく同じ処理を、違う実装方法で書き直してみます。
コントローラ内にバリデーション処理は書かずに、Requestクラスを作りその中にバリデーションルールを記述する方法です。
具体的に見ていきましょう。

artisanコマンドでRequestクラスを生成します。

php artisan make:request MemberRequest

「app/Http/Requests」フォルダ内にMemberRequest.phpが生成されました。
中を見てみましょう。

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class MemberRequest 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 [
            //
        ];
    }
}

MemberRequestクラスが定義されていて、authorize()メソッドとrules()メソッドの2つが用意されています。
今回はrules()メソッドのみ使います。authorize()メソッドは使いませんが、使わない場合は戻り値をtrueに変えておく必要があります。

    public function authorize()
    {
        return true;
    }

rules()メソッドにはバリデーションルールを記述します。
ルール文字列の連想配列を戻り値とします。

    public function rules()
    {
        return [
            'name' => 'required|string|max:10',
            'age' => 'required|integer|min:20|max:60'
        ];
    }

MemberRequestクラスはこれで完成です。

次に、このMemberRequestクラスを使うようにコントローラを書き換えていきましょう。
コントローラのclass定義の上に、次のような記述があります。

use Illuminate\Http\Request;

この下に次の1行を追記します。

use App\Http\Requests\MemberRequest;

これで先ほど作ったMemberRequestクラスをコントローラの中で使えるようになります。
MemberRequest.phpは「app/Http/Requests/MemberRequest.php」にあります。useはこの場所をPHPに教えてあげるために記述しています。

storeメソッドを次のように書き換えます。

    // 保存処理
    public function store(MemberRequest $request) {
        dump($request->all());
    }

メソッド内に記述していたバリデーション処理は削除しました。
代わりに、引数で受け取るRequestインスタンスをMemberRequestインスタンスに変更しています。
これで、MemberRequestクラスに記述したルールでバリデーションが行われ、エラーがあった場合には以前のページに戻されます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です