Posted at

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/