第一回 Catalyst::Plugin::FormValidator::Lazy 勉強
C::P::FormValidaor::Lazyというモジュールの紹介と使い方をまとめていこうと思います。
取得方法
残念ながら、CPANには上げてないので、
http://tomyhero-perl-module.googlecode.com/svn/trunk/Catalyst-Plugin-FormValidator-Lazy/
ここから取得して下さい。
メーリングで質問したら、Controllerとして実装するべきと言われたので、それを実装してみたが、
実際、コントローラごとにconstraintsを設定するのではなく、アプリ全体なので、微妙だったので、やめた。他にも問題があったし。
で、上げにくくなったので、ローカルにいます。
作成理由
毎フォームごとに、フォマットの規則を設定するのが邪魔臭くて作成しモジュール。
例。
sub foo : Local { $c->form({ required => [qw/id/], constraints => { id => qr/\d+$/, } }); } sub boo : Local { $c->form({ required => [qw/id/], constraints => { id => qr/\d+$/, } }); }
Catalyst::Plugin::FormValidatorだと、
同じidのフォーマットなのに、2回かくのがウッと惜しい。これが、作成理由でした。
使ってみよう
猫アプリ(らくだ本のような感じで呼びたい。)を用意しました。第一回は、郵便番号のフォーマットチェッカー
を作成します。
サンプルのダウンロード
このサンプルは、更新していく予定。今は、第一回分だけのコード。
http://tomyhero-perl-module.googlecode.com/svn/trunk/Sample/Neko-Web/
解説
動くようにする為に
まず、プラグインを読み込みます。
Neko::Web.pm
use Catalyst qw/ -Debug ConfigLoader Static::Simple FormValidator::Lazy /;
バリデーション用モジュールを作成します。
とりあえず、中身は気にしないでください。
Neko::Validator ですね。中身は空です。
設定を行います。
form_validator_lazy : # ここで検証用モジュールをセットします。 method_pkg : Neko::Validator strict : # post_code のフォーマットを正規表現で指定します。 post_code : '^\d{3}-\d{4}$'
コントーローラの説明
constrainsを記入していないところがポイントです。
設定ファイルから自動的に読み込みセットしています。
sub zip01_do : Private { my ( $s ,$c ) = @_; $c->form({ required => [qw/post_code/], }); if( $c->has_dfv_error ) { return ; } $c->stash->{template} = 'zip01_do.tt'; }
エラーがおこった時
has_dfv_error という関数が用意されています。これは、DFVのエラーがおこると真を返します。
ですので、これでエラーしょりができます。
if( $c->has_dfv_error ) { return ; }
また、missing ,invalid は自動的に、stashにハッシュでセットされます。ですので、
DFVエラーがおこった際、テンプレートですぐに使えます。
root/zip01.tt
[% IF c.has_dfv_error %] <div style="color:red;margin:10"> [% IF missing.post_code %]郵便番号を入力して下さい。</br>[% END %] [% IF invalid.post_code %]郵便番号のフォーマットが不正です。</br>[% END %] </div> [% END %]
検証がOKだった場合
$c->stash->{v} に $c->form->{valid}の値が入ります。ですので
郵便番号 : [% v.post_code %]
こういう風に使うことができますね。
動かして確かめよう
./script/neko_web_server.pl -k
まとめ
Data::FormValidator , Catalyst::Plugin::FormVdalidator を使用したことがないと意味が分からないかもしれない。