ホーム > perl > FormValidator::NestedをCPANにアップしました

FormValidator::NestedをCPANにアップしました

  • 投稿者: chiba
  • 2009/8/18 火曜日 21:00:36
  • perl

知人にCPAN Authorになると宣言してから8年、やっとこさなりました。もちろんCPANにアップするだけなら誰だってできるので質の高いモジュールをアップできるように今後は心がけていきたいと思います。

で、初めてアップしたのがFormValidator::Nestedです。

これは、FormValidator::SimpleFormValidator::LiteFormValidator::LazyWayなんかを参考に作られたFormValidatorです。

上記のモジュール達との主な違いといえる特長は、

  • ネストしたパラメータを扱える
  • 配列なパラメータを扱える
  • profileを継承できる

あたりになるかと思います。

profileはとりあえず今はymlで書いて、そのファイルの置かれたbaseディレクトリを指定してそこからの相対PATHがkeyになるという感じです。(FormValidator::Nested::ProfileProviderの実装を増やすことでここは柔軟に対応可能な予定)

params:
  mail:
    name: メールアドレス
    validators:
      - Blank#not_blank
      - Email#email
      - String#max_length:
          max: 100

といった感じのprofileをhoge.ymlとかでprofileディレクトリに保存して

use FormValidator::Nested;
use Class::Param;

my $req = Class::Param->new({mail => 'hoge'});
my $fvt = FormValidator::Nested->new({
    profile_provider => FormValidator::Nested::ProfileProvider::YAML->new({
        dir => 'profile',
    }),
});
my $res = $fvt->validate($req, 'hoge');
if ( $res->has_error ) {
    my $error_param_ref = $res->error_params;
    while ( my ( $key, $error_params ) = %{$error_param_ref} ) {
        foreach my $error_param ( @{$error_params} ) {
            warn $error_param->key . ':' . $error_param->msg;
        }
    }
}

といったコードを実行すると、「mail:メールアドレスの形式が正しくありません」といったwarningが出力されるみたいな使い方ですね。

ネストしたパラメータを扱えるというのはどういうことかというと、

params:
  user:
    name: ユーザ
    nest: hoge

で、huga.ymlを作って(さきほどのhoge.ymlは残したまま)

use FormValidator::Nested;
use Class::Param;

my $req = Class::Param->new({ user => {mail => 'hoge'} });
my $fvt = FormValidator::Nested->new({
    profile_provider => FormValidator::Nested::ProfileProvider::YAML->new({
        dir => 'profile',
    }),
});
my $res = $fvt->validate($req, 'huga');
if ( $res->has_error ) {
    my $error_param_ref = $res->error_params;
    while ( my ( $key, $error_params ) = %{$error_param_ref} ) {
        foreach my $error_param ( @{$error_params} ) {
            warn $error_param->key . ':' . $error_param->msg;
        }
    }
}

とやると「user[mail]:メールアドレスの形式が正しくありません」みたいなwarningになります。ちなみにネストしたパラメータてのはCGI::Expandやそれを利用してるC::P::Params::Nestedなんかの利用を想定してます。Ajaxで動的なフォームを作ったりすると必要になる場面がありますよね。

さらに、配列なパラメータが扱えるというのは

params:
  mail:
    name: メールアドレス
    array: 1
    validators:
      - Blank#not_blank
      - Email#email
      - String#max_length:
          max: 100

とかでbaz.ymlを作っておいて

use FormValidator::Nested;
use Class::Param;

my $req = Class::Param->new({ mail => ['nihen@megabbs.com', 'hoge'] });
my $fvt = FormValidator::Nested->new({
    profile_provider => FormValidator::Nested::ProfileProvider::YAML->new({
        dir => 'profile',
    }),
});
my $res = $fvt->validate($req, 'baz');
if ( $res->has_error ) {
    my $error_param_ref = $res->error_params;
    while ( my ( $key, $error_params ) = %{$error_param_ref} ) {
        foreach my $error_param ( @{$error_params} ) {
            warn $error_param->key . ':' . $error_param->msg;
        }
    }
}

とやるとやはり「mail:メールアドレスの形式が正しくありません」となるという感じです。

あとは、継承ができるという件ですが

extends: hoge
params:
  name:
    name: 名前
    validators:
      - Blank#not_blank
      - String#max_length:
          max: 100

といったprofileを書くとhoge.ymlとHash::Mergeで結合されたprofileが使われるという感じです。Hash::MergeのbehaviorはFormValidator::Nested::ProfileProviderで指定しています。(あー$behaviorはourにしといたほうがいいかな。)

まぁ、こんなところです。ちとPODがぜんぜん書けていないのでこのエントリの内容も含めそのうちPODは書き足しておきます。それまではtディレクトリの中とかをあさってもらうとsampleになるものが一通りそろってるはずです。

あ、それとcodereposにもhttp://svn.coderepos.org/share/lang/perl/FormValidator-Nested/であげてあるのでパッチ等はこちらでいただけるとうれしいです。(まだgithubに移行してない奴)

あーあとfilterも同じymlでかける(ProfileProviderを共有できる)なんて機能もあります。

params:
  tel:
    filters:
      - String#remove_hyphen
      - String#alnum_z2h
    validators:
      - String#between_length:
          min: 10
          max: 11

ま、こんな感じ。

コメント:0

コメントフォーム
入力した情報を記憶する

トラックバック:0

この記事のトラックバック URL
https://blog.everqueue.com/chiba/2009/08/18/275/trackback/
トラックバックの送信元リスト
FormValidator::NestedをCPANにアップしました - へぼい日記 より

ホーム > perl > FormValidator::NestedをCPANにアップしました

検索
フィード
メタ情報

ページの上部に戻る