FormValidatorまわりのPluginの仕様
Pluginの仕様を考えると、Validationをどこでするのか、validation error時の表示方法、formの受け渡し方あたりが考えどころだなぁと。catalystのcontrollerでstash介してform渡す仕様は、どうも直感的じゃないので違う形で実現したいなと
Validationのする場所
Formのvalidationまわりもactionベースでvalidation対象を決めて、actionが実行される前にチェックをして、Controller側ではエラーがあったらそのerrorとともにviewを表示させるというものがPerlのフレームワークでは多いように思う。
これはCatalyst::Controller::HTML::FormFuやCatalyst::Plugin::FormValidator::Simple::Autoでやられている方法。actionが実行される前にルールにもとづいてvalidationしておくという仕組みはどちらも同じだ。これは結構いいんじゃないかなぁと。
一方、Ruby周りのフレームワークはRailsの影響も大きいのか、ModelにValidationロジックをもたせるので、validationのタイミングが違う。Controllerレベルではなく、Modelレベルでvalidationが行われる。
個人的にはControllerでのValidationのほうが扱いやすいケースが多いんじゃないかという気がしていて、それはフォームとモデルが必ずしも1:1にならないケースって意外とあるんじゃないかと思っているから。
バリデーションエラーの扱い
HTML::FormFuとFormValidator::Simple系ではエラーの扱いは若干違う。
Catalyst::Controller::HTML::FormFu側では特殊なタグで埋め込む形にして、そいつにエラー時のコード生成までするって形になっている。HTMLを手書きにすれば、FormValidator系のような仕様になって、エラーをControllerからViewに渡して、それをエラーを処理するコードを人手で書くってことになる。
最近はHTML::FormFuっぽく扱って、formのhelperを提供して手でかかせる形にするのがいいのかなという気がしてきた。利用者からすると、formかいておけば、validation時のエラーまで面倒見てくれて、後はCSS調節するだけになる。このほうがユーザーが決めなければいけないことが少ない。ユーザーがformの書き方だけ覚えればいいだけで、コーディング量も大分少なくなる。