FormRequest を利用したバリデーション

2019/08/09
入力フォームからの Request をバリデートする。 FormRequest を利用すると Controller に処理を記述しなくても事前にバリデートしてくれる。

FormRequestファイルの生成

$ php artisan make:request UserStoreRequest
app/Http/Requests/ にファイルが作成される
class UserStoreRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true; //デフォルトで false になっている
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        //バリデートのルールを記述
        return [
            'name' => ['required', 'min:3', 'max:64', 'unique:users'],
            'email' => ['required', 'min:4', 'max:255', 'unique:users'],
            'password' => ['required', 'min:4', 'max:16'],
        ];
    }

    public function messages(){
        //rules に対応したメッセージを記述
        return [
            'name.required'  => '名前を入力してください。',
            'name.min'       => '名前は3文字以上で入力してください',
            'name.max'       => '名前が長すぎます',
            'name.unique'       => '名前は既に登録されています',
            'email.required'=> 'Emailを入力してください。',
            'email.min'     => 'Emailが短かすぎます',
            'email.max'     => 'Emailが長すぎます',
            'email.unique'       => 'Emailは既に登録されています',
            'password.required'=> 'パスワード入力してください。',
            'password.min'     => 'パスワードは4文字以上で入力してください',
            'password.max'     => 'パスワードは32文字以内で入力してください',
        ];
    }
}

Controller 設定

引数のクラスを Request から UserStoreRequest に変更すると FormRequest が自動的にバリデート処理をする validate エラーが発生すると、即時に全画面にリダイレクトする
    public function store(UserStoreRequest $request)  //UserStoreRequest にクラス名を変更
    {
        //UserStoreRequest で validate エラーが発生すると、以降の処理は実行されない
        $request->session()->put('request', $request->all());
        try {
            User::create($request->validated());
            return redirect('user');
        } catch (QueryException $e) {
            return back()->withInput();
        }
    }

Blade でエラー表示

FormRequest で発生したエラーは、自動バインドされた $errors で記述する。
@if (count($errors) > 0)
    @foreach ($errors->all() as $error)
  • {{ $error }}
  • @endforeach
@endif

自分自身を除外する

UPDATE で 自分自身はユニークを除外する必要がある場合、Rule::unique() を利用する。
    use Illuminate Validation Rule;
    .....
    public function rules()
    {
        return [
            'name' => [
                'required', 'min:3', 'max:64',
                Rule::unique('users')->ignore($this->id),
            ],
            'email' => [
                'required', 'min:4', 'max:255',
                Rule::unique('users')->ignore($this->id),
            ]
        ];
    }
AWS ECR を使ってみる
Laravel7 でマルチ認証
Mac に AWS Client を設定する
Laravel 7 リリース
v-html でHTML表示する
Laravel で Vue コンポーネントを使う
Laravel で Nuxt.js を使ってみる(Docker環境)
いちから始める Docker -コンテナをビルド- (2020年)
いちから始める Docker -起動してみる- (2020年)
Mac で MySQL(8系)
composer で vendor がインストールできない
Eloquent の日付を Carbon で扱う
webpack 4 入門(npm編)
[Mac]容量を減らす
DIコンテナはじめ
freee SDKを Laravel で使ってみる
freee API を使ってみる
Segueを利用しない画面遷移
Xcode11.3 で XVim2 を利用する
Codable で JSONを読み込み
Webpack入門(yarn編)
MacからLaradock PostgreSQLで接続エラー
Dockerで不要なコンテナ・イメージを削除
Mac で Laradock の構築
yarn インストール&プロジェクト作成
Laravel 6.x 構築(Homestead編)
Composer インストール
nvm インストール
npm install が Mac でエラー
HTMLタグでカーソルが同時処理(ミラーリング)されてしまう
DI(依存性注入)
[Ubuntu]Let's Encryptで無料の証明書を利用する
[Apache]Apache2.4のアクセス制限が変更
[Ubuntu]rootのログインとsudo権限追加
タミヤ マイコンロボット工作セットをMacに接続してみた
pgAdimn4 でブラウザで開けなくなる
Java8 を HomebrewとjEnvで構築
Android Studio環境構築 2019
ロケールの再構築
vagrant グループに Apacheを追加
Linux2 Apache2 + PHP7.3 + PostgreSQL10
Anadondaの削除
[Mac]初期設定メモ(CentOS)
[Mac]PostgreSQL起動
FormRequest を利用したバリデーション
[Debian]Node.js安定板インストール
try-catch で Exception検知
Middlewareを利用したルートグループ化
namespaceを利用したルートグループ化
名前付きルートによるリダイレクト