目的
- バリデーションを実装中にバリデーションルール「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'], ]