FormValidator::Simpleプラグインの作成
1つ前のエントリーのFormValidator::Simpleは、validationに使うプラグインが簡単につくれるのも良いところ。すでにCPANにも
- FormValidator::Simple::Plugin::Number::Phone::JP
- FormValidator::Simple::Plugin::CreditCard
- FormValidator::Simple::Plugin::Japanese
のといったプラグインがあがってます。
プラグインを使うには、FormValidator::Simple::Plugin::Japaneseならば
use FormValidator::Simple qw/Japanese [他モジュール]/;
または
FormValidator::Simple->load_plugin('FormValidator::Simple::Plugin:: Japanese'[,他モジュール]);
で利用できます。
プラグインは以下のような形で作成できる。
package FormValidator::Simple::Plugin::Example; use strict; use FormValidator::Simple::Exception; use FormValidator::Simple::Constants; sub EXAMPLE { my ($self, $params, $args) = @_; return ($params->[0]) ? TRUE : FALSE; } 1;
$params, $argsの中身は下で説明します。
利用の方法は、
use FormValidator::Simple qw/Example/; FormValidator::Simple->check($q=>[ param1=>['NOT_BLANK',['EXAMPLE','arg1','arg2','arg3']], #Aパターン {param=>[param1,param2]}=>['NOT_BLANK',['EXAMPLE','arg1','arg2','arg3']] #Bパターン ]);
このとき、FormValidator::Simple::Plugin::Example中のEXAMPLEの引数の中身は
$params=[param1];#Aパターン $params=[param1,param2];#Bパターン $args=[arg1,arg2,arg3];
になってます。
せっかくなんで、プラグインを書いてみた。
FormValidator::Simple::Plugin::Subroutine
validatorに無名サブルーチンを使えます。
package FormValidator::Simple::Plugin::Subroutine; use strict; use FormValidator::Simple::Exception; use FormValidator::Simple::Constants; our $VERSION = '0.01'; sub SUBROUTINE { my ($self, $params, $args) = @_; if ( scalar(@$args) == 0 || ref($args->[0]) ne "CODE") { FormValidator::Simple::Exception->throw( qq/validation "SUBROUTINE" needs a subroutine reference/ ); } my @args=@$args; my $data = $params->[0]; my $subroutine = shift(@args); my $ret; eval{ $ret = $subroutine->($data,@args); }; FormValidator::Simple::Exception->throw( qq/Error executing subroutine : $@/ ) if($@); return ($ret) ? TRUE : FALSE; } 1;
最後の手段的プラグイン。
使い方は、
use FormValidator::Simple qw/Subroutine/; my $results = FormValidator::Simple->check( param=>[['SUBROUTINE',sub{ my($data,@args)=@_; #確認コード return ($data) ? 1 : 0; },'arg1','arg2']] );
DBに接続してIDやメールアドレスがすでに使われていないか確認したり用途はあると思われです。
コメント
始めまして。
仕事でCGIApp + FormValidator::Simple使っているのですが、こういうのないかなーと思っていたらここにたどり着きました。記事が去年やからもっと早めにみつけていればと、、。(DBの接続とかのところは今までFormValidatorなしでやってました。。あーはずかし、、)
とはいえほんと助かりました。
投稿者: holly | 2006年03月15日 22:41
DBでの確認は、
FormValidator::Simple::Plugin::CDBI::Unique
FormValidator::Simple::Plugin::DBIC::Unique
なんていうのもあります。
SUBROUTINE、EVALUTIONとかで、CPANにあげようかなぁ。
投稿者: かぜぶろ | 2006年03月15日 23:27