Laravel5.6, 5.7 バリデーションを記述→個別化(FormRequest)

Laravel5.6, 5.7 バリデーションを記述→個別化(FormRequest)

こんにちは、のるぼるのんです。今回もLaravel5.6, 5.7の機能を紹介していきます!

 

LaravelのRequestはデフォルトでHTTPリクエストをバリデーションするValidatesRequestトレイトを使用しているので、バリデーションルールを簡単に使用出来ます。

 

というわけで、早速やっていきましょう!前回の記事(論理削除を実装する)の内容でmembersテーブルにデータを入力していきます。

リソース、コントローラー、モデルはこんな感じ。

 

create.blade.php

送信するのは名前、ポジション、身長です。全てrequiredをつけています。

 

Member.php

$fillableにfill()メソッドで自動入力する項目を設定しています。

 

MembersController.php

createメソッドにデータを渡すことで、fill()->save()しています。

 

で、今のままだと、以下の問題があるわけです。

name(必須) : 文字数制限を超えるとエラー。

position(必須) : 文字数制限を越えるとエラー。

height(必須) : 負の値を送信でエラー。4桁の身長が保存できる。1桁の身長でも保存できる。

 

普通にバリデーションルールを記述。

MembersController.php

こんな感じですかねー。

maxで最大値を記述。numericで数値のみ許可。digits_betweenで桁数を指定。今回はこのままでも良いのですが、コントローラーに記述が多くなるのと、他の部分にも同じバリデーションを適応する場合、編集漏れなどの問題があります。ですのでFormRequestを使用して、バリデーションルールを個別化しましょう。

 

FormRequestを使用する

FormRequestを作成

 

FormRequestを編集

MembersRequest.php

コントローラーの代わりに作成したFormRequestにバリデーションルールを記述します。

 

MembersController.php

FormRequestを使用することで、コントローラーに記述しなくてもバリデーション、リダイレクトバックを行ってくれます。

バリデーション済みのデータの呼び出しにはvalidated()メソッドを使用します。

 

これでコントローラーの簡略化、使い回しが出来るようになりました。

 

カスタムメッセージ、バリデーションルールの追加など、様々機能がありますので、そちらもそのうち紹介したいです。

Laravelカテゴリの最新記事