Requestクラス作ってバリデーションを実装する

2018/10/12

img02

以前、フォームにバリデーションの機能を作りました。

入力した内容にバリデーションをかける

前回はControllerにバリデーションを定義しましたが、Requestクラスを作ってそちらにバリデーションを実装するのが王道です。

これをFormRequest機能と呼びます。

前回バリデーションをPostIndexメソッドに記述したのですが、今回はこのFormRequest機能を使ってリファクタリングの作業をしてみます。

リファクタリング・・・理解しやすい&拡張しやすいソースに書き換えること

 

チュートリアル

実現したいこと

  • FormRequest機能を使って入力データのバリデーションを行うようにする

 

手順

1. ArtisanコマンドでRequestクラスを生成

Windowsのコマンドプロンプトを起動してLaravelのプロジェクトに移動します

cd C:\xampp\htdocs\mylaravel

ArtisanコマンドでRequestクラスを生成します。

php artisan make:request GreetingRequest

app/Http/Requests/GreetingRequest.phpが作成されます。

img01

 

2. 生成されたRequestクラスの編集

app/Http/Requests/GreetingRequest.php を編集します。

<?php
namespace App\Http\Requests;
use App\Http\Requests\Request;

class GreetingRequest extends Request
{
  /**
  * Determine if the user is authorized to make this request.
  *
  * @return bool
  */
  public function authorize()
  {
  # 認証の仕組みがない場合は何でも通すという意味でtrueを設定
  return true;
  }

  /**
  * Get the validation rules that apply to the request.
  *
  * @return array
  */
  # バリデーションはrulesメソッドに書く
  public function rules()
  {
  return [
  'onamae' => 'required'
  ];
  }
}

rulesメソッドにバリデーションを設定していきます。

Controllerに記述していたバリデーションの記述をそのままここにコピペします。

 

3. Controllerの編集

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

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

#モデルを使用する
use App\Greeting;

#↓今回追加↓
use App\Http\Requests\GreetingRequest;

class GreetingController extends Controller
{
:
# Request ⇒ GreetingRequestに書き換える
public function postIndex(GreetingRequest $request)
{

    /*
     * バリデーション
     */

     // ここでのvalidate が不要になるので消す

:
  # Request ⇒ GreetingRequestに書き換える
  public function update(GreetingRequest $request,$id)
  {
      :

1) Artisanコマンドで生成したGreetingRequestクラスをインポートします。

use App\Http\Requests\GreetingRequest;

2) フォームから入力されたデータを受け取るメソッドの引数を

Request $request ⇒ GreetingRequest $request

に変更します。

3) コントローラに記述していたvalidationは不要なので消します。

これでバリデーションの実装はOKです。

エラーがあったときは自動で前画面にリダイレクトしてくれます。便利ですね。

 

4. 動作確認

入力フォームに空白で送信

img02

編集フォームに空白で送信

img03

Requestクラスのバリデーションがちゃんと動いているのが確認できます。

本庄マサノリ

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

>> Twitter をフォローする

 

-基礎知識