どこでやるか問題が個人的にありまして〜、DBを使わないケースならばいわゆるFomrValidator::*を使ってControllerでやればいいのですが、Modelを経由するようなアプリだとControllerだけじゃ不安よねぇ〜、Modelだけ使う時もあるし、Model単体のテストで再現出来ないよね〜なんて思ってます。実際の実装をControllerではFormValidator::Lite、Modelの一部にData::Validatorを使っているのですが、なんかコレも効率悪い感じしてたんで、ちょいと実験的に理想の一つを実装してみました。エラーメッセージを簡単に設定したいのでValidationモジュールにはFormValidator::Liteを使う色々錯誤していたらORMの段階でValidationしてResultオブジェクトを返すってのがいいのではないかResultオブジェクトではhas_error/error_messagesメソッドをはやしてControllerで扱いやすくするValidationが通ればentryメソッドで生成されたORMのオブジェクトを取得出来るWAFはMojolicious、ORMにはTengを使う前提で書いてみるするとController側はこんな風に書ける。$result->entry->id);}$self->model('Entry')ってのはMyApp::Model::Entryを呼び出しすショートカットなんだけど、createメソッドの返り値が例のResultオブジェクトになっている。Model側はもちろん他の処理も入るけど最小限これでイケる。'Teng'」するMyApp::DBモジュール。これをちょいと拡張する。$result;};__PACKAGE__->meta->make_immutable();1;MyApp::DB::Resultはこんなん。'Object');__PACKAGE__->meta->make_immutable();1;その他にFormValidator::Liteを呼び出すためのMyApp::Formと個別のルールが書かれたMyApp::Form::Entryなどが存在する。以下がMyApp::Formで親クラス。FormValidator::Liteに渡す際、パラメータ系の互換にするめにMojo::Parametersを暫定的に使ってます。$validator;}__PACKAGE__->meta->make_immutable();1;子にあたるMyApp::Form::Entryにはルールが存在している。モジュールにべた書きしてます。ORMの層じゃなくてModelのとこで書くのもいいし。