Catalyst::Plugin::FormValidatorとコントローラ

Catalyst::Plugin::FormValidator とコントローラ内の移動で上手くいかないのでなやむ。なぜなら、入力チェックとかで、前のページにfowardとかしちゃうと、2回form()が走る。で、最初のページの入力チェックでこけるケースがある。また、1回目のDFVエラー情報もクリアされちゃう。

現象例

ここにアクセス。

/first/?a=123&b=123
$c->form(required=>[qw(a b)];

/second/?a=123&c=asfd
$c->form(required=>[qw(a c)] , constraints=> {c=>qr/^\d$/} );

$c->form->invalid ; # c が入ってる。

ここで、cの値は数字のみなので、firstに戻りたい。

$c->dispath('first');

firstのDFVチェックが走る
$c->form(required=>[qw(a b)];

$c->form->missing ; #b が入ってる。
$c->form->invalid ; #cが消えて、空になっている。

この結果から、2つ問題があることがわかる。

  • firstに戻れない
  • cの入力チェックでこけたのに、bのエラーになっている。

とりあえず解決方法として、$c->formを一回しか走らないように規則を設け対応。でも気に食わないなぁ。もっと良いほうほうがないかなあ。

教えて、カタリストモンガー!