フォームバリデーションモジュール 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