ホーム > カテゴリ > PHP・Laravel・CakePHP >

フォームリクエストの使い方 [Laravel]

Laravelの「フォームリクエスト」はバリデーションの処理を専門に行います。コントローラーとバリデーションの処理を切り分けたい際に使用します。

前提条件

// コントローラー
・app\Http\Controllers\Answer(s)Controller.php
// ビュー
・resources\views\answers\index.blade.php

があるものとします。※(s)は現場によって単数形、複数形が異なる。

1. フォームリクエスト

1-1. フォームリクエストのファイルを生成する

php artisan make:request HelloRequest

app\Http\Requests\HelloRequest.phpが作成される。

1-2. HelloRequest.php

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class HelloRequest extends FormRequest
{
    public function authorize()
    {
        // 一致するパスのみバリデーションを実行する
        if ($this->path() == 'answers')
        {
            return true;
        } else {
            return false;
        }
    }

    public function rules()
    {
        return [
          'name'  => 'required|max:50',
          'url'   => 'nullable|url|max:250', 
          'body'  => 'required'
        ];
    }

    public function messages()
    {
        return [
            'name.required' => '名前は必ず入力して下さい。',
            'url.url' => 'ホームページに正しい形式を指定してください。',     
            'body.required' => '本文は必ず入力して下さい。',
        ];
    }    
}

messages()でエラーメッセージを設定できるが、validation.phpを利用した方が良い。 エラーメッセージの日本語化 (validation.php)を参照。

1-3. コントローラー

storeの引数がRequestではなくHelloRequestになっている事を確認。

// 追加分
use App\Http\Requests\HelloRequest;

public function store(HelloRequest $request)   
{
  // なんらかの保存処理  
}

これだけでフォームリクエストによるバリデーションは完了です。

エラーがない場合はコントローラーの「何らかの保存処理」へ進み、エラーがある場合は自動的に前画面に戻って$errorsにエラー内容が設定されます。

2. おすすめのやり方

モデルでルールを定義する手法です。Ruby on Railsと同じです。

2-1. モデル

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

// 追加分
use App\Rules\NgWord;

class Answer extends Model
{
   protected $guarded = array('id');   
     
   public static function Rules()
   {
      return [
          'name'  => ['required','max:50', new NgWord('name')],
          'url'   => 'nullable|url|max:250', 
          'body'  => ['required', new NgWord('body')]
          ];
   }
}

NgWordはカスタムバリデーションルールです。カスタムバリデーションルールを使用する際は[]で配列にする必要があります。

2-2. コントローラー

// 追加分
use App\Answer;
 
public function store(Request $request)
{
    // バリデーション
    $request->validate(Answer::Rules());  

    // なんらかの保存処理  
}





関連記事



公開日:2020年11月17日
記事NO:02855


この記事を書いた人

💻 ITスキル・経験
サーバー構築からWebアプリケーション開発。IoTをはじめとする電子工作、ロボット、人工知能やスマホ/OSアプリまで分野問わず経験。

画像処理/音声処理/アニメーション、3Dゲーム、会計ソフト、PDF作成/編集、逆アセンブラ、EXE/DLLファイルの書き換えなどのアプリを公開。詳しくは自己紹介へ
プチモンテ代表、アーティスト名:プチモンテ
🎵 音楽制作
BGMは楽器(音源)さえあれば、何でも制作可能。歌モノは主にロック、バラード、ポップスを制作。歌詞は叙情詩、叙情的な楽曲が多い。楽曲制作は2023年12月中旬 ~

オリジナル曲を始めました✨

YouTubeで各楽曲を公開しています🌈
https://www.youtube.com/@petitmonte

【男性ボーカル】DA・KA・RA | 新たな明日が風と共に訪れる

【男性、女性ボーカル】時空を超越する先に | 時空と風の交響曲

【女性、男性ボーカル】絆 | 穏やかな心に奏でる旋律