フォームリクエストについて

2020/08/12

前回、コントローラにバリデーションを作成しました。

バリデーションについて

しかし王道ではフォームリクエストにバリデーションを実装します。

フォームリクエストにバリデーションを実装すれば使い回しもできるのでコードのリファクタリングにもなります。

今回はフォームリクエストについてエントリーします。

 

フォームリクエストについて

Laravelではフォームを含む各リクエストに対して、それぞれ固有のバリデーションを設定できるファイルが用意されています。

これをフォームリクエストとよび、バリデーションエラー時には入力値とエラー情報を付与して前のページに自動的にリダイレクトしてくれます。

バリデーションをパスした時に初めてコントローラー内の処理に移ります。

フォームリクエストは app/Http/Requests/ に置きます。

artisanコマンドで自動生成できます。

 

チュートリアル

前回作成したチュートリアルを改修します。

コントローラに記述したバリデーションの記述をフォームリクエストに移します。

 

手順

1)artisanコマンドでフォームリクエストのスケルトンを作成
2)フォームリクエストを編集
3)コントローラを編集
4)ビューでのエラー表示
5)動作確認

 

1)artisanコマンドでフォームリクエストのスケルトンを作成

php artisan make:request ValiDemoRequest

コマンドを実行すると app/Http/Requests/ValiDemoRequest.php ができます。

 

2)フォームリクエストを編集

このファイルを以下のようにコーディングします。

以下、解説します。

authorize()は権限に関する判定を行うメソッドです。

使わない場合は true を返しておきます。

:
class ValiDemoRequest extends Request
{
  public function authorize()
  {
  return true;
  }
:

 
バリデーションのルールを記述します。

:
  public function rules()
  {
  return [
  'username'=>'required',
  'mail'=>'required|email',
  'age'=>'required|numeric',
  'opinion'=>'required|max:500'
  ];
  }
:

 
デフォルトで表示されるエラーメッセージをカスタマイズします。

messages()をオーバーライドします。

:
public function messages() {
  return [
  "required" => "必須項目です。",
  "email" => "メールアドレスの形式で入力してください。",
  "numeric" => "数値で入力してください。",
  "opinion.max" => "500文字以内で入力してください。"
  ];
}
:
【 注意 】
既存のメソッドをオーバーライドするので rules() と messages() のメソッド名は変えることはできません。

 

3)コントローラを編集

コントローラーの引数に先ほど作成したフォームリクエストのクラスをあてます。

フォームリクエストのクラス(ValiDemoRequest.php)に書いたルールでリクエストが自動的に検証されます。

:
// DIのフォームリクエストはuseでパスを省略してもOK
public function confirm(\App\Http\Requests\ValiDemoRequest $request) {
  $data = $request->all();
   return view('validation.confirm')->with($data);
}

DIするクラス(ValiDemoRequest)を変えることで、バリデーションルールを変えることができます。

新規登録と更新でルールを変えたいときなどは便利です。

フォームリクエストを使うとコントローラは大分すっきりしました。

 

4)ビューでのエラー表示

エラーをViewで受け取るには errors を利用します。

ここでは name の最初のエラーを取得しています。

<input type="text" name="username" value="{{ old('username') }}">
@if($errors->has('username')) <span class="text-danger">{{ $errors->first('username') }}</span> @endif

 

5)動作確認

http://{ホスト名}/validation にアクセスしてバリデーションがちゃんとかかっているか確認します。

以上です。

 

PHPフレームワーク Laravel入門 第2版

僕がはじめてLaravelを学習するために参考にしたサイトは、掌田津耶乃(しょうだつやの)さんの libro というサイトです。当時(2016年)、Laravel学習サイトの中でもこのサイトは群を抜いてわかりやすく説明されていたので、とても勉強になったのを覚えています。この本は掌田津耶乃さんが書いた本なので、わかりやすく解説されているだろうと kindle で購入しました。2020年8月の時点でいうと日本国内にて唯一の Laravel の良書と言っても良いかと思います。口コミでもLaravel本のロングセラー定番解説書として認知されています。当サイトではチュートリアル形式でLaravelを解説しているので、初心者の方はこの本とセットで学習されるといいと思います。しかし、かなりわかりやすく解説されているとはいえ、PHP中級者以上のスキルは必要です。PHP自体の知識が乏しい方は 独習PHP 第3版 をあわせて購入することをお勧めします。

Amazonで詳細を見る

オススメ

 

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-基礎知識