【Laravel】バリデーションの種類と使い方

フォームなどからのリクエストの値が正しいかどうかチェックすることをバリデーションと言いますが、Laravelには標準でバリデーション機能が装備されています。その機能のアプローチの仕方がいくつかあるのでまとめてみました。

Laravel6.x以上

標準のvalidateメソッドを使う方法

標準で用意されているメソッドを使う方法です。Controller内で使えて一番手軽で簡単な方法ですが、応用があまり利きません。

例えばブログの投稿などを例にすると以下のようになります。(Laravel公式の記述を抜粋 一部修正)

上記のように書くだけでバリデーションが行われます。バリデーションが通らなかった場合は、自動的にリクエスト元のページヘリダイレクトします。同時にエラー内容がフラッシュデータとしてセッションへ保存されます。エラー内容の受け取り方などについては、今回は割愛します。

required、unique:posts、max:255などのバリデーションルールの種類と詳細は、公式をご参照ください。

新しいバリデータインスタンスを作成する方法

makeファサードを使って、新しいバリデータインスタンスを作成できます。バリデーション後の自動リダイレクトを使わず自分の好きな処理をしたい場合などに便利です。

独自フォームリクエストを使う方法

独自のフォームリクエストクラス作成して、Controllerでリクエストを受け取る前にバリデーションを行います。いろいろ応用が利いたバリデーションをすることができます。

フォームリクエストクラスの作成

以下のコマンドでFormRequestを継承したクラスを作成します。「StoreBlogPost」は任意の名前でOKです。

コマンドを実行すると、「app/Http/Request」内に新しいフォームリクエストクラスが作成されます。「Request」フォルダがない場合は新規に作成されます。

中身は以下の通り。

authorizeメソッド

authorizeメソッドでは、ユーザーがリクエストの権限を持っているかtruefalseで返します。falseを返すと、403ステータスコードを返し、コントローラメソッドは実行されません。例えば以下のように追記します。

デフォルトではfalseを返しているので、特に判断することがなければ以下のようにtrueを返すように変更します。

rulesメソッド

バリデーションルールを作成するには、rulesメソッドに以下のように追記します。

他にもオリジナルのFormRequestを上書きできるメソッドがいくつかあります。例えば↓

messageメソッド

エラーメッセージの上書き

attributesメソッド

属性の上書き

prepareForValidationメソッド

バリデーションルールにかける前にリクエスト内容を処理できます。

作成したフォームリクエストクラスをControllerで使う

デフォルトでは、「Illuminate\Http\Request」を使うようになっているので、作成したフォームリクエストクラスを使うようにControllerを以下のように変更します。

これで、自作したフォームリクエストクラスを使ってバリデーションをすることができたと思います。こちらの方が応用が利くのでおすすめです。