[Catalyst] current profile won't fill with C::P::FormValidator::Simple::Auto

rahed raherh at gmail.com
Thu Apr 17 13:22:12 BST 2008


Hi,

I use C::C::FormBuilder which lacks complex validation. I looked
around and want to use C::P::FormValidator::Simple::Auto with external
yaml files.

$c->config->{validator}->{profiles} gets filled from my profile file but
current profile ($c->validator_profile) is never filled.

This should be done in a C::P::FV::S::A forward method but true test
$c->config->{validator}{profiles}{ $action }
is never ok.

I call my run action having forms like this:
$c->forward('run');

And calling $c->form->has_error within run action should throw an
error according to profile rules. Object $c->form is
FormValidator::Simple::Results object. It has only message part but
profile part is missing.

Cannot find out why this behaviour. Could someone shed some light?

......................
sub forward {
    my $c = shift;
    my $action = $c->dispatcher->_invoke_as_path($c, @_);

    no warnings 'once';
    local $NEXT::NEXT{ $c, 'forward' };

    my $res;
    if ( my $profile = $c->config->{validator}{profiles}{ $action } ) {
        # first time validation
        if (not $c->validator_profile) {
            $c->{validator_profile} = $action;

            $c->form(%$profile);
            $res = $c->NEXT::forward(@_);
        }
        else {
            # don't override validator stuffs when not first time validation
            local $c->{validator} = FormValidator::Simple->new;
            local $c->{validator_profile} = $action;

            $c->form(%$profile);
            $res = $c->NEXT::forward(@_);
        }
    }
    else {
        $res = $c->NEXT::forward(@_);
    }

    $res;
}
...................

-- 
Radek



More information about the Catalyst mailing list