検証モジュール Data-FormValidateEm(仮名)
Data-FormValidateEm
てのを作ってる。前にもいったかも。それなりに動くようになったので、ちょっとメモっとく。
特徴
- フォームごとではなく、アプリ単位でConstraints設定をおこなう
- 検証プラグイン追加ができる実装
- メッセージ周りがすげー怠けれる
- DFVをまねてる
- 同じフィールド名で複数の値を受け付けたい場合、may_be_plural,must_be_pluralを使う。
今回はメッセージ周りがどれだけ怠けれるかを紹介する
実装的に、Pluginには既に検証メッセージが格納されている。
package Data::FormValidateEm::Plugin::String; use strict; use warnings; sub dfv_length { my $text = shift; my $args = shift; die 'you must set max argument' unless exists $args->{max}; die 'you must set min argument' unless exists $args->{min}; return ( length $text > $args->{max} or length $text < $args->{min} ) ? 0 : 1; } sub mes_length { { ja => '$_[min]文字以上$_[max]文字以下', } } sub dfv_ASCII { # code.. } sub mes_ASCII { { ja => 'ASCII文字', } }
以下の設定では、 title は、上記のString::lengthと,ASCIIの検証に通るひつようがある設定になっている。
この設定でたとえば、「ヴ」とタイトルに入力して、両方の検証にマッチしなかったとする。
constraints : strict : title : - String::length : args : max : 50 min : 10 - String::ASCII labels : ja : title : 題名
そうすると、以下のエラーメッセージが自動で作成される。メッセージ内に引数の値が使用できるのがDRYなところ。
題名には10文字以上50文字以下,ASCII文字が使用できます。
この部分で、検証内容を文章にしてる。
package Data::FormValidateEm::Plugin; use strict; use warnings; sub mes_invalid { { ja => '__field__には__rule__が使用できます。', } } 1;
フィードバックその他貰えるとよろこびます。
共同開発してくれる方も全裸で募集中です。
コメント、若しくはtomohiro.teranishi@gmail.com 、若しくは irc.lazy-people.org#dfv までご連絡を!