質問: **作成ファイルの確認** 1つめ.... フォームです.。 郵便番号(数字3文字-数字4文字のみOK)と カナ(3〜64文字のカタカナのみOK) を送信します 2つめ.... 自作のリクエストクラス(ValidationCheck)を使用するコントローラクラスです。 もちろんblade⇨web.php⇨controller⇨の流れです。 今回は画面遷移は成功しているのでweb.phpは記載しません。 3つめ.... バリデーションチェックをカスタマイズしたので作成した。リクエストクラス(ValidationCheck)です。 kanaは入力値が全てカタカナか、のみチェックします。 zipcodeは入力値が123(数字)-1234(数字)の形式になっているか、のみチェックします ※挙動は問題ありません。 ``` //form部分のみ該当blade.phpから抜粋しました {{ csrf_field() }} @if ($errors->has('kana')) {{ $errors->first('kana') }} @endif @if ($errors->has('zip')) {{ $errors->first('zip') }} @endif @foreach ($errors->all() as $error) {{ $error }} @endforeach ``` ``` public function store(ValidationCheck $request) { //エラーメッセージの確認なので何も書いていません。 } ``` ``` 'required|min:3|max:64|kana', 'zip' => 'required|zipcode' ]; } public function messages() { return [ 'kana.required' => 'ナマエの入力は必須です', 'kana.min' => 'ナマエは3〜64文字で入力してください', 'kana.max' => 'ナマエは3〜64文字で入力してください', 'kana.kana ' => 'ナマエはカタカナで入力してください', 'zip.required' => '郵便番号の入力は必須です', 'zip.zipcode ' => '郵便番号は123-1234の形式で入力してください', ]; } } ``` **直面している問題** 予想していた挙動は カタカナの入力欄に「日本日本日本」と入れると、required、min、maxは問題なく、kanaのみがエラーになると思っていたのですが、どうやらminかmaxのどちらか、もしくは両方でエラーになっています。ですのでblade上では$errors->all()を使用しないと「ナマエはカタカナで入力してください」というエラーメッセージが表示されません。 逆にいうと$errors->all()使うと「ナマエはカタカナで入力してください」というエラーメッセージが見れるのでkanaとmin(max)の2つエラーとなっています。 **質問** 1 上記の様に' kana' => 'required|min:3|max:64|kana' 複数エラー判定がある場合、それが2つでも5つでも どこかのエラー判定に当てはまった場合そこでそのメッセージだけを取得するのではなく全部確認するのですか。つまり「あ」と入力するとrequired以外の全てのエラーメッセージが作られるのですか。それともminで「あ」の場合はエラーになるのでそれで終わりですか。 2 しかしカナを空白にすると$errors->all()で見ても「ナマエの入力は必須です」しか表示されていないので requiredに通った時点で残りは見ていない様な気がするのですが。どの様な挙動になっているのですか。
回答: > > minかmaxのどちらか、もしくは両方でエラーになっています > > > バリデーションメッセージが同じだから切り分けができていないのでしょう。 まずはメッセージ内容を変更して(とりあえずmin,maxと冒頭につけるだけでも良い)切り分けを行ってください。 > > しかしカナを空白にすると > > > 自身ならどう作るかを考えてみてください。 必須のフィールドに何も入っていないのであれば、minもmaxも他のチェック内容もチェックしようがありません。無用です。 それだけrequired指定は最前提のチェックということです。