ラベル FormValidator::Simple の投稿を表示しています。 すべての投稿を表示
ラベル FormValidator::Simple の投稿を表示しています。 すべての投稿を表示

2006年3月15日水曜日

FormValidator::Simple::Extension - アップロードファイルのバリデーションなど

前回のエントリでFormValidator::Simpleでアップロードされたファイルのバリデーションができるように拡張したモジュールを書いているといいましたが、それっぽいものができました。

FormValidator-Simpe-Extension-0.01.tar.gz

SimpleのExtensionてどっちやねんという感じですが、アップロードファイルのバリデーション以外に、メッセージをFlaggedなUTF-8にデコードした形でgetできるような機能もつけてみたので、名前をなんにするか悩んだ挙句、とりあえずExtensionにしておきました。使い方はこんな感じです。

>


use FormValidator::Simple::Extension;

## アップロードファイルのバリデーション

FormValiator::Simple::Extension->check( $q, [
thumbnail => [
'UPLOAD_NOT_BLANK', # ファイルがアップされたかどうか
[UPLOAD_FILESIZE,0, 1024], # ファイルサイズは1kBまで
[UPLOAD_FILENAME_REGEX, 'jpe?g|gif|png$'] #画像っぽいファイル名ならOK
],
]);

## メッセージをFlagged UTF-8でうけとる

FormValidator::Simple::Extension->set_messages('messages.yml');
# どんな文字コードからデコードするか文字コードをセット
FormValidator::Simple::Extension->set_message_decode_parms('utf-8');
my $result = FormValidator::Simple::Extension->check($q, $prof);
# メッセージはデコードされる
my $messages = $result->messages;

<

これらの拡張が本家のFormValidator::Simpleに取り込まれたらうれしいのですが、アップロードファイルを取得する方法がApache::Requestのuploadメソッドしか想定してないので、ちょっとマイナー過ぎるきもします。。
CGI.pmのuploadメソッドも考慮したものにすれば、取り込んでもらえるかなー。



2006年3月11日土曜日

FormValidator::Simple::ProfileManager::YAML

SledgeのValidatorを作るにあたって、FormValidator::Simple用のプロファイルをYAMLで定義するためのモジュールを書いてみました。

FormValidator::Simple::ProfileManager::YAML

まずは以下のようなYAMLファイルを用意します。

>

# sample yaml profile
group1 :
- name
- [ [NOT_BLANK] ]
- email
- [ [NOT_BLANK], [EMAIL_LOOSE] ]
- tel
- [ [NOT_BLANK], [NUMBER_PHONE_JP] ]
- content
- [ [NOT_BLANK] ]

group2 :
subgroup1 :
- userid
- [ [NOT_BLANK]]
- password
- [ [NOT_BLANK]]
- name
- [ [NOT_BLANK] ]
- email
- [ [NOT_BLANK], [EMAIL_LOOSE] ]
subgroup2 :
- tel
- [ [NOT_BLANK], [NUMBER_PHONE_JP] ]
- { zip : [zip1, zip2] }
- [ [ZIP_JP] ]
- address
- [ [NOT_BLANK] ]
<

group1とかsubgroup1というのはプロファイルをグルーピングするのに使います。

使い方は簡単です。まずオブジェクトを作成します。

>

use FormValidator::Simple::ProfileManager::YAML;
my $manager = FormValidator::Simple::ProfileManager::YAML->new('/path/to/profile.yml');
<

デフォルトではYAMLをロードするのにYAMLモジュールを使いますが以下のようにloaderをオプションとして渡すと、YAML::Syckを使うこともできます。

>

my $manager = FormValidator::Simple::ProfileManager::YAML->new(
'/path/to/profile.yml',
{
loader => 'YAML::Syck',
}
);
<

プロファイルを取得するには、get_profileメソッドを使います。パラメータとして、グループ名を渡せば、そのグループに属するプロファイルを取得することができます。
取得したプロファイルはそのままFormValidato::Simpleに渡すせます。

>

# group1のプロファイルを取得
my $profile1 = $manager->get_profile('group1');

# subgroup2のプロファイルを取得
my $profile2 = $manager->get_profile( 'group2', 'subgroup2' );

#取得したgroup1のプロファイルをそのままわたす。
my $result = FormValidator::Simple->check($q , $profile1);

<