じろう

2019年11月02日に参加

学習履歴詳細

[Laravel]課題アプリのバリデーションをカスタマイズしたい

今日のYWT

やったこと

Travelog

  • バリデーションメッセージの編集
  • バリデーションのドキュメント読む

わかったこと

ArticleRequest.phpに以下のような画像バリデーションのコードがある

public function rules()
    {
        return [
            // 中略
            // 画像ファイル
            'files.*.photo' => 'image|mimes:jpeg,bmp,png',
        ];
    }

imageで画像(jpg、png、bmp、gif、svg、webpのどれか)形式かチェックし、 mimes:jpeg, bmp, pngで画像の中でもjpeg, bmp, pngであることを求めている。

この状態で、例えばまず image のバリデーションに引っかかるようなファイル(例えば今回はzip)をアップロードすると、バリデーションエラーメッセージが2つ出てしまう。

アップロードするファイルには画像ファイルを指定してください。
アップロードするファイルにはjpeg, bmp, pngタイプのファイルを指定してください。

これを、imageのバリデーションに引っかかった時点で mimes のチェックはしない、もしくは mimesのほうのバリデーションエラーメッセージを表示しない、という挙動にしたいと思った。

以前、教えてもらったように、エラーメッセージのカスタマイズでできないかと思い以下のように書いてみた。

    // エラーメッセージのカスタマイズ
    public function messages()
    {
        return [
            // attribute名 . 引っかかったバリデーションルール => 出したいメッセージ
            'end_date.after_or_equal' => '開始日または終了日を確認してください',
            'files.*.photo.mimes|files.*.photo.image' => 'jpeg, bmp, pngタイプの画像ファイルをアップロードしてください',
        ];
    }

しかしこれだと、エラーメッセージは上で貼ったものと変わらず同じ

このようなケースだと、バリデータの作成を使わないといけないかもしれない。

次やること

  • バリデーションカスタマイズ終わらせる
  • ページネーション実装
Laravel

2020年11月17日(火)

1.1時間