PHP
laravel5.7

Laravel5.7:FormRequestを使ってバリーデーションを実装する

こちらはブログにも投稿しています。

公式のドキュメントを確認するとController内に記述するやり方が紹介されていますが、これだとControllerのソースが見にくくなるので、FormRequestに分けて実装して行きます。

FormRequestの作成

まずはartisanを使用してFormRequsetの雛形を作成します。

php artisan make:request UserFormRequest

コマンドを実行すると以下のようにファイルが作成されます。

app
├── Http
│   └── Requests
│       └── UserRequest.php

ルールとメッセージを設定

バリデーションのルールとメッセージを設定します。簡単に必須チェックだけしています。
rulesメソッドにバリデーションのルールを記載して、エラーメッセージをカスタマイズしたい場合は、messagesメソッドを追記します。

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class UserRequest extends FormRequest
{
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            'name' => [
                'required',
            ],
            'address' => [
                'required'
            ]
        ];
    }

    public function messages()
    {
        return [
            'name.required' => '名前は必ず指定してください。',
            'address.required' => '住所は必ず指定してください。'
        ];
    }
}

Controllerからの呼び出し

こちらはメソッドインジェクションするだけです。バリデーションエラーがある場合は前の画面に自動的に遷移してくれます。

use App\Http\Requests\UserRequest;

class UserController extends Controller
{
    public function store(UserRequest $request)
    {
        dd($request->validated());

入力画面でエラーを表示

入力画面のViewにエラーを表示する箇所を用意しておきます。

                @if ($errors->any())
                    <div class="alert alert-danger">
                        <ul>
                            @foreach ($errors->all() as $error)
                                <li>{{ $error }}</li>
                            @endforeach
                        </ul>
                    </div>
                @endif

まとめ

バリデーションをFormRequestにまとめることができたのでかなりController内のソースがスッキリしました。
以下は、参考にしたサイトです。

https://speakerdeck.com/localdisk/laravelniokeruhou-hui-sinaitamefalseapurikesiyonshe-ji

https://tac-blog.tech/index.php/2018/09/01/request-validation/