HTML::AutoForm (フォームビルダー&バリデータの話)
NanoA 用に作ったフォームビルダー&バリデータを HTML::AutoForm (svn link) として独立させました。
フォームを定義したり
my $form = HTML::AutoForm->new( fields => [ username => { type => 'text', required => 1, min_length => 6, max_length => 8, regexp => qr/^[0-9a-z_]+$/, }, ... ], );
フォームを検証したり
# validate form my $ok = $form->validate( $query, # any object that support $query->param('name') sub { ... }, # callback to check if csrf token is valid );
フォームを描画したり (必要に応じてエラーメッセージ等が埋め込まれます)
# render form $html .= $form->render( $query, $csrf_token, );
こんな感じです。デフォルトの描画が気に食わない場合は、
for my $field (@{$form->fields}) { $html .= join( '', '<div class="form_field">', $field->render(); '</div>', sub { my $err = $field->validate($query) or return (); return ( '<div class="form_error">', $err->message, '</div>', ); }->($field), ); }
みたくして手動で定義すればいいので、CSS でがんばってレンダリングする必要もありません。
なお、
$HTML::AutoForm::DEFAULT_LANG = 'ja';
としておくと、標準のエラーメッセージが全部日本語になります。
そういえば MENTA と NanoA には、既にバンドルされてるらしいよ。