Laravel学習帳

Laravel5.2の学習帳です。開発環境はXAMPP for Windows 5.6.19 / 本番環境はさくらサーバー(スタンダード)

基礎知識

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

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

バリデーションについて

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

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

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

 

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

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

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

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

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

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

 

チュートリアル

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

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

 

手順

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

 

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)動作確認

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

以上です。

 

-基礎知識