環境
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歳までの値で入力してください」と表示したかったのだが、、、
解決方法
ん?関数名がスネークケースになったものが表示されているな?
もしかしてキャメルケースではなくスネークケースにしなきゃいけないってことなのか?と名推理が働きました。
PersonRequest.php
public function messages()
{
return [
'age.age_size_limit'=>'年齢は100歳までの値で入力してください'
];
}
直った!!
正しい書き方をさりげなく出力してくれていたんですね。。。
結論
オリジナルバリデータを作る際、ルール名となる関数名を使う場合は、
rules関数ではキャメルケースでよくて、messages関数ではスネークケースにする。