mod_perlとCatalyst::Plugin::Form::Validator::Simple


mod_perlで複数のCatalystアプリケーションを動かしていて、複数のアプリケーションでCatalyst::Plugin::Form::Validator::Simpleをつかっている場合にうまく動かない。

メッセージが共通になってしまう。


原因は、

FormValidator::Simpleで

__PACKAGE__->mk_classaccessor( messages => FormValidator::Simple::Messages->new );

そしてCatalyst::Plugin::FormValidator::Simpleで

FormValidator::Simple->set_messages( $setting->{messages} );

となっていて、要するにmessagesがサーバ全体で共通っていうことなんだけど。


どういう直し方をしようか非常に微妙。

1. FormValidator::Simpleのインスタンスはリクエスト毎に生成されるので、リクエスト毎にFormValidator::Simple::Messagesのインスタンスを生成して、set_messagesする
2. $c->config->{name} でもとってアプリケーションごとに振り分ける。

を考えたけど、1はメッセージをyamlに書いている場合に毎回YAML::Loadが呼ばれるので効率悪い。
自分ではC::P::FormValidator::Simple::Autoをつかっていて、メッセージをプロファイルと一緒に書いてるのでとりあえずこっちにしてる。

で、2は結構気持ち悪い。


どうしようかなぁ。