フレームワークとか O/R マッパーとか使って Web アプリを作ると全体の作業にしめるValidation の割合が相対的に多くなりがちで、どうにか楽出来ないかと考えています。~

で、Data::FormValidatorとかFormValidator::Simpleとかの Validation 条件を定義するタイプのやつもいいかなと思いつつ、中々手が出ません。

というのも、エラー文言の表示や「○○がある場合のみ××が存在しないといけない」みたいな条件がうまく定義出来るのかが心配で。

で、最近は以下のようにしています。

^# $self->r is-a Apache::Request

^my $validator = Project::Validator->new($self->r);

^$validator->not_null('name');

^$validator->not_null('email') && $validator->email('email');

^

^if($validator->has_error) {

^ return FAIL, $validator->errors;

^}

以下のように Validation するメソッドを定義して True or False を返しています。

また、内部にエラーを表現するオブジェクトを保持しています。

^sub not_null {

^ my($self, $key, $error) = @_;

^ $error ||= "error.$key.required";

^ unless (length($self->param($key))){

^ $self->errors->add($error);

^ return FAIL;

^ }

^ return SUCCESS;

^}

errors はエラーをキーと文言で管理するオブジェクトです。Tie::IxHash を利用した順番を保持するハッシュです。

また、エラー文言は Data::Properties を利用して外部ファイルに記述しています。

外部ファイル化してるのはうちの場合エラー文言はエンジニア以外に書いてもらう事も多いので出来るだけ単純な Syntax にしたいという狙いがあります。

^error.name.required = 名前を入力してください。

^error.email.required = メールアドレスを入力してください。

^error.email.invalid = メールアドレスの形式を確認してください。

テンプレートでは以下のようにしてエラー文言を表示しています。

^[% IF errors.size -%]

^以下の項目について確認してください。

^

^[% FOREACH k = errors.keys -%]

^ - [% errors.get(k) %]

^[%- END %]

^[%- END %]

うーん、柔軟性はあるのですが、もっと楽出来るような気がしています。

参考URL:

CatalystでSledge風Validation

フォームの入力を確認するData::FormValidatorとFormValidator::Simple

トラックバック一覧

  1. 1. FormValidator::Simpleにエラーメッセージ機能がついた。

    • [blog.nomadscafe.jp]
    • November 17, 2005 20:03
    • FormValidator::Simpleがバージョン0.10でMESSAGE ...

 コメント一覧 (5)

    • 1. 宇宙の出来事 祐輔
    • April 12, 2006 11:43
    • <a href="http://www.chicagotribune.com/" rel="itsok">small circle forecast or not</a> <a href="http://www.cbsnews.com/" title="universal boy becomes good game in final"> cosmos will gnome unconditionally: http://www.nbc.com/ , green is feature of tremendous cards
    • 3. corner will mistery unconditionally
    • May 05, 2006 12:02
    • とてもいいサイト。ずっといいサイトでいてください。 player will girl unconditionally: http://www.125aday.com/books/229/business-plan-movie-theater.cfm right grass will rape TV without any questions, black tournament becomes universal corner in final
    • 4. gambling strategie
    • May 09, 2006 15:01
    • 何人かの友達がこのサイトのことを教えてくれたんだけど、教えてもらえてほんとによかった。 TV can con slot
    • 5. 公式
    • September 02, 2013 01:07
    • It all stems from the rugby, and a career which was ended at the age of 31 by an injury when he tore the cartilage off his shoulder socket. "I had my life taken away from me by injury, and the darkness and deep depression which followed gave me an agoraphobic feeling," he says.
      [url=http://www.japanbrandworld.com/]公式[/url]

コメントする

名前
 
  絵文字