LoginSignup
0
0

More than 3 years have passed since last update.

Laravelで独自バリデーションでのエラーメッセージがおかしい時

Last updated at Posted at 2019-07-11

環境

Laravel Framework 5.6.26

状況

まず、独自のValidatorとなる部分を作る

PersonValidator.php
    public function validateAgeSizeLimit($attribute,$value,$parameters){//ageSizeLimitという名前でルールを定義
        return $value <= 100;
    }
PersonRequest.php
    public function rules()
    {
        return [
            'age'=>'ageSizeLimit', //先ほど作った独自のルールを指定
        ];
    }

    public function messages()
    {
        return [
        'age.ageSizeLimit'=>'年齢は100歳までの値で入力してください',
        ];
    }

上記のバリデーションならLaravelがあらかじめ用意してる『max:100』だけでも可能です。
この独自ルールを作る際、「validate」の後の最初の部分を小文字にしたものを使えるということは知っていた。
例) 「validateHello」なら、「hello」という名前でルールが使える。

なので、上記の「PersonValidator.java」での「validateAgeSizeLimit」
という名前なら「ageSizeLimit」という名前で使えると思って使ってみたら、
バリデーションエラーメッセージに「validation.age_size_limit」
となり、本当は「年齢は100歳までの値で入力してください」と表示したかったのだが、、、

スクリーンショット 2019-07-11 17.44.44.png

解決方法

ん?関数名がスネークケースになったものが表示されているな?
もしかしてキャメルケースではなくスネークケースにしなきゃいけないってことなのか?と名推理が働きました。

PersonRequest.php
    public function messages()
    {
        return [
        'age.age_size_limit'=>'年齢は100歳までの値で入力してください'
        ];
    }

スクリーンショット 2019-07-11 17.45.19.png

直った!!
正しい書き方をさりげなく出力してくれていたんですね。。。

結論

オリジナルバリデータを作る際、ルール名となる関数名を使う場合は、
rules関数ではキャメルケースでよくて、messages関数ではスネークケースにする。

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