フォームバリデーションモジュール FormValidator::LazyWayでハマった点
- 2012.12.26
- perlモジュール
- FormValidator::LazyWay, perl
フォームのバリデーションルールをアプリケーションで統一出来るモジュールで、便利そうなので試してみたところ FormValidator::LazyWay::Rule::String の nonsymbol_ascii methodでハマったのでメモ。
FormValidator::LazyWay::Rule::String - search.cpan.org
ページの設定サンプルに
username: rule: - String#nonsimbol_ascii: args: allow: - '_' - '-'
という記述があるのだけれど、これが間違っていて nonsimbol_asciiではなく 正しくは nonsymbol_ascii。
コレただのtypo。
ハマった点はここではない。
FormValidator::LazyWay::Rule::String のソースを見ると
sub nonsymbol_ascii { my ($text, $args) = @_; if ( ref $args->{allow} eq 'ARRAY' ) { foreach my $allow ( @{$args->{allow}} ) { $text =~ s{$allow}{}xmsg; } } return $text =~ /^[a-zA-Z0-9]+$/ ? 1 : 0; }
ってなっているのだけれど、実は第2引数に渡されるものが
{ 'args' => { 'allow' => [ '_', '-' ] } }
となっていて、
ref $args->{allow} eq 'ARRAY'
が成り立たない。
正しい設定は args: は要らなくて
username: rule: - String#nonsimbol_ascii: allow: - '_' - '-'
になる。
※ if ( ref $args->{args}->{allow} eq 'ARRAY' ) {
ではないかとも思うけど、他のruleのコード(FV::LW::Rule::Emailとか)を見るとドキュメントが間違っているだけだと思われます。
ちょっとハマったけどこのモジュールは非常に便利そうな感じ。バリデーションのルールがあちこちに散らばるのを防げるので重宝しそうです。
-
前の記事
開発環境のMacからメールを送信するために必要な事。メールサーバ(Postfix)の設定と起動、OP25B対策。 2012.12.21
-
次の記事
Gunma.web#12でLTしました 2013.02.11