« サーバがKernel Panicしてた。 | メイン | order by rand() »

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

FormValidator::Simpleがバージョン0.10でMESSAGE HANDLING機能が追加されたのでさっそく試してみた。

想定するフォームは、以前試した時と同じ

<form>
メールアドレス:<input name="mail" type="text" id="mail" size="20" /><br /> 
パスワード:<input name="password" type="password" id="password" size="20" /><br />
もう一度パスワード:<input name="password_confirmation" type="password" id="password_confirmation" size="20" /><br />
パスワードは半角英数字5文字〜32文字
</form>

で行いました。

エラーメッセージの設定には、set_messagesを使う。

FormValidator::Simple->set_messages({
        action1=>{
            mail=>{
                NOT_BLANK=>'メールアドレスを入力してください',
                EMAIL=>'メールアドレスが正しくありません',
            },
            password=>{
                NOT_BLANK=>'パスワードを入力してください',
                DEFAULT=>'パスワードは英数字5文字〜32文字で入力してください'
            },
            password_confirmation=>{
                DEFAULT=>'パスワードが一致しません'
            }
        }
});


「action1」はあとでメッセージ取得用のキーとなっています。
この状態で今までと同じようにcheckをする。

my $result = FormValidator::Simple->check($q=>[
    mail=>['NOT_BLANK','EMAIL'],
    password=>['NOT_BLANK','ASCII',['LENGTH',5,32]],
    {password_confirmation=>[qw/password password_confirmation/]}=>['DUPLICATION']
]);


エラーメッセージの取得&表示は、

my $messages = $result->messages('action1');#arrayref
foreach my $message ( @$messages ) {
    print $message, "\n";
}

とするとできる。

エラーメッセージは外部ファイルにYAML形式で設定する事もできる。shebang!のikebeさんのところで紹介されていたテクニックに近い。「action1」のところのキーを活用すれば、エラーメッセージを1つの外部ファイルにまとめられそう。メッセージのソースからの分離はおそらくハゲシク便利。


試しに、CGI::Applicationをつかった動くものをつくった。ソースはこちら

CGI::Application::Plugin::FormValidator::Simpleの場合、set_messagesは、以下で設定できる。

$self->validator->set_messages({
        action1=>{
            mail=>{
            ・・・・
});


追記:
本家にもエントリーがされました。今回速かったのはCPANでアップデートしたときに0.10って想定外の数字(内容にも)がでたので驚いた勢いです。

コメント

FormValidator::Simpleは便利そうですが、使うためにはDate::Calcが必要みたいですね。サーバーにDate::Calcがなく、しかもroot権限も無い場合はやっぱり使えないんですか?

sshなどでログインできる場合なら、CPANのモジュールインストール時に
perl Makefile.PL PREFIX=/home/username/
とかで自分のディレクトリにインストールできます。

あとはスクリプトで
use lib "/home/username/lib/perl5/site_perl"
とすると使えますよ。

use libのディレクトリにちょっと自信がないのでいろいろ調べてみてください。

インストール情報ありがとうございます!!

早速試してみます!!

コメントを投稿