http://www.perlmonks.org?node_id=375152


in reply to HTML::Template Data::FormValidator Help ?

I usually work in this way:
# CGI::Application code... # The main runmode, where I show the page # sub foo { my $self = shift; my $s = $self->session(); my $tmpl = $self->load_tmpl('foo'); # ... load data in the template, as long # as the missing and invalid fields, that # come from the session (see foo_update()). foo_view( $tmpl, $data, $s->param('missing'), $s->param('invalid') +); return $tmpl->output(); } sub foo_update { my $self = shift; my $q = $self->query(); my $s = $self->session(); my %form = $q->Vars(); + my $results = Data::FormValidator->check( \%form, $profile ); + + if ($results->has_invalid() or $results->has_missing()) { + + $s->param( missing => [ $results->missing() ] , + invalid => [ $results->invalid() ] ); + + $self->redirect( { rm => 'foo' } ); + } + else { + + # Data are good, we proceed... + $self->redirect( { rm => 'bar' } ); + } + }
Then I setup a View module, that receives the template object, data and the invalid and missing fields, like this:
# This is called by foo() from the main application, just before # to display the page # sub foo_view { my $template = shift; my $date = shift; my $missing = shift; my $invalid = shift; $template->param( "missing_$_" => 1 ) for @$missing; $template->param( "invalid_$_" => 1 ) for @$invalid; # [...] return $template; }
Finally, in the template, I can write things like that:
<TMPL_IF invalid_some_field>Bad boy! This is an error message.</TMPL_I +F>