のぐそんブログ

暗いおじさんがシコシコ書くブログです。

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の間で入力してください。'
        ];
    }

設定したメッセージが表示されます。