Validateルールの拡張
id:Objet さんの日記より。
ここは「日付を正しく入力してください」だけにしたいところ。でも、年についてはyear.rangeを設定したい。現状では無理っぽいのかな。
現在、year/month/dayの3つの引数があって、3つそれぞれのチェックと、3つあわせた日付の妥当性チェックを行うと最大4つのエラーが出てしまう。
これはかなり不便なので以下の3つの解決策を考えている。
- Date_Validatorの拡張
- Valdateルールのグルーピング
- Valdateエラーの個別取得
1つ目のDate_Validatorの拡張だが、日付チェックで月と日は基本的に数字の範囲は固定だが、年の範囲は場合によって変えたいと思うので、それをチェックパラメータとすることができるようにしようと思う(もちろん指定しなくてもいい)。以下のようにすると、年の範囲指定も含めた日付チェックを行うようにする。
year,month,day.date = "1,日付を正しく入力してください,1970,2004"
2つ目のValidateルールのグルーピングだが、「:」を使用することによりグルーピングできるようにしたいと思う(こちらもグルーピングしたいときだけ「:」を使う)。以下のようにすると4つのルールを「datechk」というグルーピングを行い、その4つの中でストッパーが設定できるようにする。基本的に1つ目の方策で今回のパターンは救われてしまうのだが、グルーピングの機能はあったほうがいいと思う。
year.range:datechk = "1,年は1900〜2004の間で入力してください,1900,2004" month.range:datechk = "1,月は1〜12の間で入力してください,1,12" day.range:datechk = "1,日は1〜31の間で入力してください,1,31" year,month,day.date:datechk = "1,日付を正しく入力してください"
3つ目のエラーの個別取得だが、現在はエラー文字列をまとめて配列でしかとれないので、個別に取得可能とする。以下のようにすると引数「year」で起こったエラーが個別に取得できる。(グルーピングした場合は、引数毎の取得ではなく、グループでの取得とする)
{errorList->getMessage key="year"}
これにより、入力フィールドの横に個別にエラーを出していくということにも対応ができるようになると思う。
これらはまとめて今週末リリース予定のbeta1で実現予定。