LoginSignup
0
0

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-01-07

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

公式のドキュメントを確認すると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/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0