公式のドキュメントを確認すると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内のソースがスッキリしました。
以下は、参考にしたサイトです。
tac-blog.tech
コメント