Validateルールの拡張

id:Objet さんの日記より。

ここは「日付を正しく入力してください」だけにしたいところ。でも、年についてはyear.rangeを設定したい。現状では無理っぽいのかな。

現在、year/month/dayの3つの引数があって、3つそれぞれのチェックと、3つあわせた日付の妥当性チェックを行うと最大4つのエラーが出てしまう。

これはかなり不便なので以下の3つの解決策を考えている。

  1. Date_Validatorの拡張
  2. Valdateルールのグルーピング
  3. 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で実現予定。