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

2018/10/12

img02

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

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

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

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

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

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

 

チュートリアル

実現したいこと

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

 

手順

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

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

1
cd C:\xampp\htdocs\mylaravel

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

1
php artisan make:request GreetingRequest

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

img01

 

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?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の編集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?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クラスをインポートします。

1
use App\Http\Requests\GreetingRequest;

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

Request $request ⇒ GreetingRequest $request

に変更します。

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

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

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

 

4. 動作確認

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

img02

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

img03

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

本庄マサノリ

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

>> Twitter をフォローする

 

-基礎知識

はじめてのVPS
 
S