0
1

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 バリデーションルールsizeで文字数があっているのにバリデーションエラーが出る

Posted at

目的

  • バリデーションを実装中にバリデーションルール「size」で指定した文字数と一致しているのにエラーが出てしまう問題をまとめる

実施環境

  • ハードウェア環境
項目 情報
OS macOS Catalina(10.15.5)
ハードウェア MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)
プロセッサ 2 GHz クアッドコアIntel Core i5
メモリ 32 GB 3733 MHz LPDDR4
グラフィックス Intel Iris Plus Graphics 1536 MB
  • ソフトウェア環境
項目 情報 備考
PHP バージョン 7.4.3 Homwbrewを用いて導入
Laravel バージョン 7.0.8 commposerを用いてこちらの方法で導入→Mac Laravelの環境構築を行う
MySQLバージョン 8.0.19 for osx10.13 on x86_64 Homwbrewを用いてこちらの方法で導入→Mac HomebrewでMySQLをインストールする

問題のコード

  • 郵便番号を保存する処理でビューファイルから送信された郵便番号データをチェックする処理を書いた。

  • データ受け取り側のコントローラファイルのアクション部分の処理を記載する。(ビューファイルにはバリデーションエラーを出力する処理が施されている。)

    public function update(Request $request)
    {
        // バリデーションルール記載
        $rules = [
            // 入力された郵便番号データが「空でない」「数値である」「文字長が7文字である」ことと確認するバリデーションルール
            'postal_code' => ['required', 'integer', 'size:7'],
        ]
    
        // バリデーションチェック
        $this->validate($request, $rules);
        
        return redirect(route('home'));
    }
    
  • 「The postal code must be 7.」と言うバリデーションエラーがビューファイルに出力された。

  • 文字数が7ではないと言うバリデーションエラーである。

原因

  • バリデーションルールの指定をミスしていた。
  • 「フィールドが数値で値の桁数を指定するバリデーションルールが別に存在する。
  • digits:桁数でルールを記載することができる。

解決策

  • バリデーションルール記載部分を下記の様に修正する必要がある。

  • 下記の様に記載することにより入力データが「空でない」かつ「数値で桁数が7である」と言うルールが定義できる。

        $rules = [
            'postal_code' => ['required', 'digits:7'],
        ]
    
0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?