C::P::FillInForm と C::P::FormValidator::Simple の連携方法

C::P::FillInForm は、C::P::FormValidator が組み込まれており、かつ、エラーが存在する時に、自動でパラメータを Fill in してくれる。
個人的には、C::P::FormValidator::Simple が好みなので、C::P::FillInForm の finalize を、少しだけ書き換えた。

ついでに、C::P::DefaultEnd を使っていると、SYNOPSIS に表記されている使い方がし難いので、$c->stash->{fdat} に値が設定されていると Fill in されるようにもしてみた。

sub finalize {
    my $c = shift;
    if (
           $c->isa('Catalyst::Plugin::FormValidator')
        || $c->isa('Catalyst::Plugin::FormValidator::Simple')
    ) {
        $c->fillform
          if $c->form->has_missing
          || $c->form->has_invalid
          || $c->stash->{error};
    }

    if ( $c->stash->{fdat} ) {
        $c->fillform( $c->stash->{fdat} );
    }

    return $c->NEXT::finalize(@_);
}