laravel

LaravelでFormRequestを使ってバリデーションをする方法

2021年8月20日

 

あなた
laravelでformrequestを使ってバリデーションをかけるにはどうすればいいですか?

 

今回は上記のような質問に答えていきます。

 

【前提】

・laravel8.X

 

LaravelでFormRequestを使ってバリデーションをする方法

 

今回想定しているのは、「新規ユーザー作成時のバリデーション」です。

構成としては以下のような感じです。

 

処理の流れ

 

コントローラーで、入力情報を受け取り、バリデーションに引っかかったらその時点で処理を終了させる形になります。

では、さっそく具体的な処理の書き方を紹介していきます。

 

各ファイルの中身を公開

 

多分、ファイルの中身を見たほうが早いと思うので、コントローラーとバリデーションクラスのファイルを紹介します。

ちなみに、今回は以下のデータがフォームから送られてくる設定とします。

 

・名前

・メールアドレス

・パスワード

・確認用のパスワード

 

↓コントローラー

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Http\Requests\User\CreateUserRequest;

class UserController extends Controller
{
    protected $createUserRequest;

    public function __construct()
    {
    }

    //「CreateUserRequest $createUserRequest」を指定するとバリデーションしてくれる
    public function store(CreateUserRequest $createUserRequest)
    {
       //バリデーション済の$createUserRequestを使ってサービスクラスに処理をさせる
    }
}

 

↓バリデーションクラス

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rules;

class CreateUserRequest extends FormRequest
{
    public function authorize()
    {
        return true; //ルーティングファイル、もしくはコントローラーで認証処理は行う前提なのでtrueで返す
    }

    /**
     * 文字列は事前にサニタイズする
     */
    protected function prepareForValidation()
    {
        if ($this->has('name')) {
            $this->merge(['name' => e($this->name)]);
        }
    }

//バリデーションルールを設定できる
    public function rules()
    {
        return [
            'name'   => ['required', 'string', 'max:255',], //必須、文字型、最大255文字
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
//必須、文字型、メール、最大255文字、usersテーブルでユニーク
            'password' => ['required', 'confirmed', Rules\Password::defaults()]
        ];
    }
}

 

上記で完了です。

実はメチャクチャ簡単です。

ちなみに、細かいバリデーションルールの設定については公式ドキュメントに記載されています。

あなたのケースに応じて柔軟に設定してみてください。

 

注意ポイント

 

formrequestを使ってバリデーションを構成するときの注意ポイント(ハマりポイント)を紹介します。

 

①authorize()

 

formrequest用ファイルのauthorizeメソッドではtrueを返しておくようにしましょう。

trueにしなかった場合「403 THIS ACTION IS UNAUTHORIZED」などのエラーが出ます。

 

ちなみに、ここでtrueを返すだけの記述にする場合(認証処理を書かない場合)はコントローラーかルーティングファイルで必ず認証処理を書いておいてください。

 

②prepareForValidation()

 

formrequest用ファイルのrulesメソッドにわたす前に処理をはさみたい場合はここに記述してください。

(rulesの後ではないので注意です)

 

今回は以上です。

ちなみに、Laravelの記事は以下で見ることができます。

よかったらどうぞ。

>>Laravelの記事一覧

 

プログラミングスクールに関する情報

【無料あり】プログラミングスクールおすすめランキング【WEBエンジニアになりたい方向け】と書かれた画像
【無料あり】プログラミングスクールおすすめランキング【WEBエンジニアになりたい方向け】

  あなたプログラミングスクールに通いたいけどたくさんありすぎてどこがいいのかわかりません。   最近はエンジニアブームということもありプログラミングスクールが増えました。 一方でたくさんありすぎてど ...

続きを見る

返金保証ありのプログラミングスクールランキング【エンジニアが選びました】と表示されたパソコンの画面
【転職保証つき】返金保証ありのプログラミングスクールランキング【エンジニアが選びました】

  あなた返金保証がついているオススメのプログラミングスクールってありますか?   結論から話すと、返金保証つきのプログラミングスクールランキングは次の通りです。   1位:DMMWEBキャンプ  【 ...

続きを見る

wordpress
【無料あり】WEB制作を学べるオンラインスクールランキング【副業で稼ぎたい方向け】

  あなたWeb制作の副業で稼ぎたいけど、どのスクールで学ぶのが良いの? スクール選びで失敗はしたくないです。   ↑このような疑問や不安を解決するべく、現役のWebエンジニアがWEB制作を学べるスク ...

続きを見る

フリーランス
無料あり:フリーランスを目指せるプログラミングスクールランキング【体験をもとに徹底分析しました】

  あなたフリーランスエンジニアを目指すことができるプログラミングスクールってありますか?   最近では、高年収や働きやすさの魅力からフリーランスエンジニアを目指す方も増えてきました。 結論から話すと ...

続きを見る

WEB系自社開発企業にいけるプログラミングスクールランキング【現役エンジニアおすすめ】と書かれた画像
WEB系自社開発企業にいけるプログラミングスクールランキング【現役エンジニアおすすめ】

  あなたWEB系の自社開発企業に就職したいです。 オススメのスクールを教えて下さい。   結論から話すと、WEB系自社開発に行きやすいスクールのランキングは以下の通り。   第1位:テックアカデミー ...

続きを見る

-laravel

© 2022 エンジニアてんし君ブログ