1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Laravel】フォームリクエストクラスについてまとめ

Last updated at Posted at 2020-04-13

#フォームリクエストクラス

ユーザーがフォーム入力をして送信した HTTP リクエストの情報に対してバリデーションをかける事ができる。

##以下のコマンドで作成できる

$ php artisan make:request #[クラス名]
SumpleRequest.php
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class SumpleRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize(): bool
    {
        // ユーザーがこのリクエストの権限を持っているか否かをbooleanで返す。
        // 例 Route::post('comment/{comment}');のパラメータを取得、
        //    commentsテーブルにidカラムが$commentIdで、
        //    user_idカラムがログイン中のidであるデータが存在するか否かをチェック。
        $commentId = $this->route('comment');
        return Comment::where('id', $commentId)
                  ->where('user_id', Auth::id())->exists();
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules(): array
    {
        return [
            // ココにバリデーションを記述する。
            'title' => 'required|unique|max:255',
            'body' => 'required',
            'image' => 'required|file|mime::jpg,jpeg,png,gif',
        ];
    }
}

##authorize()メソッド
  権限に関する判定を行うメソッド、権限に対する true,false を設定する。
  アプリケーションの他の場所に別の認証ロジックがあれば、trueを返すだけで良い。

##rules()メソッド
  この中にバリデーションのルールを書く。

##バリデーションルールの書き方(抜粋)
  rules()メソッドの戻り値に連想配列で渡す。

    /**
     * @return array
     */
    public function rules(): array
    {
        return [
            // 必須、指定されたDBテーブルに無い(uniqueな)、255文字までの文字列
            'title' => 'required|unique|string|max:255',
            // 必須、
            'subtitle' => 'required',
            // 必須、10MBまでのjpg,jpeg,png,gifファイル
            'image' => 'required|file|mimes:jpg,jpeg,png,gif|max:10000',
            // 必須、255文字までの文字列
            'address' => 'required|string|max:255',
            // 必須、10〜11桁の数値
            'phone_number' => 'required|digits_between:10,11',
            // 必須、数値のみ
            'article_id' => 'required|numeric',
            // 必須、21845文字までの文字列
            // TEXT型(max:65535バイト、UTF-8(1文字3バイト)だと21845文字入る)
            'article' => 'required|string|max:21845',
        ];
    }

##使い方
バリデーションを掛けたいコントローラーのメソッドの引数にタイプヒント1で渡す。
渡されたフォームリクエストは、コントローラーメソッドが呼び出される前に確認される。

SumpleController.php
/**
 * @param  SumpleRequest  $request
 * @return Response
 */
public function index(SumpleRequest $request): Response
{
    // controllerの処理
}

バリデーションに成功すると、コントローラーの処理に進むが、失敗すると、エラーメッセージと入力値がフラッシュデータ2として保存され、リダイレクトレスポンスが返される。
Ajax リクエストの場合、バリデーションエラーを表現する JSON を含んだ、422 ステータスコードの HTTP レスポンスが返される。

##参考文献
Laravel6.xドキュメント/基礎/バリデーション

  1. タイプヒント/タイプヒンティング(型宣言)
    関数およびメソッドが受け取る引数に対して、特定の型であることを指定できる機能。

  2. フラッシュデータ
    特殊な種類のセッション・データで、あるリクエストの中で設定されると、次のリクエストの間においてのみ読み出すことができて、その後は自動的に削除される。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?