Laravel:バリデーションをスマートかつ、任意メッセージを作成


【概要】

1.結論

2.どのようにコーディングするか

3.開発環境

1.結論

FormRequestを作成し、rulesに検証ルールを用いて、messagesメソッドで任意のメッセージを記載する!


2.どのようにコーディングするか

まずFormRequestを作成します。

php artisan make:request HogeRequest

なぜFormRequestを作成するのかというと、その方が機能としてスマートだからです。Controllerにも記載することは可能ですが、コントローラーはViewやModelに指示を送る橋渡し役がメインになります。バリデーションをする役目ではなく、クライアントからリクエストされた際にリクエスト内部でバリデーションの機能を実行した方がスマートだからです。

上記で作成した後にControllerに下記の記載を忘れないでください。

app/HttpControllers/HogeController.php
use App\Http\Requests\HogeRequest;

このように記載しないと下記に記載するHogeRequest.phpが機能しません。

app/Http/Requests/HogeRequest.php
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class HogeRequest extends FormRequest
{
    public function authorize() #---❶
    {

        if ($this->path() == 'hoge') #---❷
        {
            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' => '適切なemailを入力してください',
            'age.numeric' => '年齢は整数で入力してください',
            'age.between' => '適切な値を入力してください'
        ]; #---❻
    }
}

❶:authorizeで、FormRequestが許可されているかどうかチェックします。
❷:アクセスしたパスをチェックしています。hoge以外は通さないようにしています。
❸:rulesで、バリデーションの機能を果たしています。
❹:blade.php(view)におけるname要素(name,mail,age)を指定し、検証ルール(required,email,numeric|between)に則ってコーディングしています。
❺:FormRequestのmessagesメソッドをオーバーライドしています。つまり親クラス(FormRequest)のメソッドを子クラス(HogeRequest)で再定義しています。記述していないルールがあった場合は親クラスがそのままレンダリング(英語表記)されます。
❻:❹と同じようにコーディングします。その際に'name要素.検証ルール(❹で設定したルール)' => '任意のメッセージ'を記載すると、アプリ制作者が意図したメッセージを表示できます。


3.開発環境

PHP 7.4.10
Laravel 8.9