0
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?

【Laravel】FormRequestのバリデーションについて

0
Posted at

概要

実務で、久しぶりにFormRequestクラスを使ったバリデーションの設定を行った際、仕組みを忘れていたので備忘録として記事にまとめてみます。

FormRequestクラスの作成方法

1から自分でクラスを作成することも可能ですが、コマンドを打って作成する方が楽。

コマンド
php artisan make:request TargetCostRateRequest

このコマンドを入力することで、以下のファイルが作成される。

TargetCostRateRequest.php
class TargetCostRateRequest extends FormRequest
{
  public function authorize()
  {
      return false;
  }

  public function rules()
  {
      return [
          //
      ];
  }

Requestファイルについて

authorize()

authorize()メソッドはユーザーがフォームリクエストを実行する権限を持っているかどうかを判定するメソッド。
trueなら実行権限を持っている。falseなら持っていない、ということになるが、基本的にはtrueに書き換える。

rules()

rules()メソッドはフォームフィールドに対するバリデーションルールを定義する。
定義方法は文字列形式配列形式の2種類がある。

基本的な使い分けとしては、複数の複雑なルールやカスタムルールクラスを使用する場合、配列形式の方が柔軟性が高く、コードが見やすくなる点にある。

注意
自分が実務でハマってしまったのは、配列に定義するキー名なのですが、
ここには、Bladeファイルで設定したname属性をそのまま設定します。
そのため、以下のソースコード内の'title'と'body'はBladeファイルのname属性として設定されている名前ということになります。

-文字列形式

文字列形式
public function rules(): array
{
    return [
        'title' => 'required|unique:posts|max:255',
        'body' => 'required|string',
    ];
}

-配列形式

配列形式
public function rules(): array
{
    return [
        'title' => 'required|unique:posts|max:255',
        'body' => [
            'requrired',
            // カスタムバリデーションの呼び出し
            new CustomValidationClass(),
        ],
    ];
}

上述した2つはコマンドで作成するとデフォルトで用意されているメソッドだが、他にもある。
個人的によく使うメソッドを追加でまとめる。

attributes()

バリデーションでデフォルトのエラーメッセージを表示すると、その属性名が表示される。
attributesを編集することで、この属性名を好きな値に変更することができる。

属性名を定義
public function attributes()
{
    return [
        'start_date' => '開始年月',
        'end_date' => '終了年月',
    ];
}

messages()

messages()には、任意のエラーメッセージを定義することができる。
※これを設定しなくても勝手にエラーメッセージは出る。

また、'attribute名.ルール'の形式で記述することで、rules()で設定したルールの内容をメッセージに反映させることもできる。

エラーメッセージを定義
public function rules(): array
{
    return [
        'title' => 'required|unique:posts|max:255',
        'body' => 'required|string',
    ];
}

public function attributes()
{
    return [
        'title' => '題名',
        'start_date' => '開始年月',
        'end_date' => '終了年月',
    ];
}

public function attributes()
{
    return [
        'required' => ':attributeは、必須項目です。',
        'gte:0' => ':attributeは0以上を指定してください。',
        // rules()で設定したルールの内容をメッセージに反映させることもできる
        'title.max' => ':attributeは最大:max文字以内で入力してください。'
            // 出力:題名は最大255文字以内で入力してください。
    ];
}

最後に

簡単でしたが、FormRequestクラスでバリデーションを設定する方法をまとめてみました。
FormRequestクラスを使うやり方以外にも、Controllerにべた書きする方法等もあるみたいです。(私はやったことがないですが、、)

最後までお読みいただきありがとうございした。
間違いや指摘等がありましたら、ご連絡いただけると幸いです。

以上

0
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
0
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?