HTML::Template::Associate::FormValidator - HTML::Template::Associate Data::FormValidator plugin
This class is not intended to be used directly but rather through a
HTML::Template::Associate. It provides concrete class functionality, it
will take Data::FormValidator::Results object and reconstruct data structure
to one appropriate for use by the HTML::Template.
use CGI qw/:standard/;
use Data::FormValidator;
use HTML::Template;
use HTML::Template::Associate;
my $cgi = CGI->new;
#for testing purposes we can add some input to our cgi object
$cgi->param( 'fullname', 'John Doe' );
$cgi->param( 'phone', 6041112222 );
$cgi->param( 'email', 'invalid@email' );
my $input_profile = {
optional => [ qw( company fax country ) ],
required => [ qw( fullname phone email address city state zipcode ) ],
constraints => {
email => 'email',
fax => 'american_phone',
phone => 'american_phone',
zipcode => '/^\s*\d{5}(?:[-]\d{4})?\s*$/',
state => "state",
},
defaults => { country => "Canada" },
msgs => {
prefix=> 'error_',
missing => 'Not Here!',
invalid => 'Problematic!',
invalid_seperator => ' <br /> ',
format => 'ERROR: %s',
any_errors => 'some_errors',
}
};
my $validator = Data::FormValidator->new;
my $results = $validator->check ( scalar $cgi->Vars, $input_profile );
my $associate = HTML::Template::Associate->new( {
target => 'FormValidator',
results => $results,
extra_arguments => [ $validator ] #not needed but just illustrated
} );
my $template = HTML::Template->new(
filename => 'test.tmpl',
associate => [ $cgi, $associate ]
);
print $template->output;
#and in our test.tmpl file we could have
Valid Fields:<br>
<TMPL_LOOP NAME=VALID_FIELDS>
Field Name: <TMPL_VAR NAME=FIELD_NAME><br>
Field Value: <TMPL_VAR NAME=FIELD_VALUE><br>
</TMPL_LOOP>
Missing Fields:<br>
<TMPL_LOOP NAME=MISSING_FIELDS>
Field Name: <TMPL_VAR NAME=FIELD_NAME><br>
Field Value: <TMPL_VAR NAME=FIELD_VALUE><br>
</TMPL_LOOP>
<TMPL_IF NAME=INVALID_phone>
Phone: <TMPL_VAR NAME="phone"> you supplied is invalid.
</TMPL_IF>
<TMPL_IF NAME=MISSING_city>
City name is missing, please fix this.
</TMPL_IF>
<!-- We can also access our normal field names
since $cgi object was passed as associate as well -->
I think <TMPL_VAR NAME=country> is very big country.
<!-- Optional use of Data::FormValidator::Results msgs interface -->
Message Fields:
<TMPL_LOOP NAME=MSGS_FIELDS>
Field Name: <TMPL_VAR NAME=FIELD_NAME><br>
Field Value: <TMPL_VAR NAME=FIELD_VALUE><br>
</TMPL_LOOP>
<TMPL_IF NAME=MSGS_error_city>
Our default error message set in the profiling code is:
<TMPL_VAR NAME=MSGS_error_city>
</TMPL_IF>
The following will become available to your associate object/template:
Key / Perl / Template
Arrays / Loops
VALID_FIELDS / $associate->param(q{VALID_FIELDS}); / <TMPL_LOOP NAME=VALID_FIELDS>
MISSING_FIELDS / $associate->param(q{MISSING_FIELDS}); / <TMPL_LOOP NAME=MISSING_FIELDS>
INVALID_FIELDS / $associate->param(q{INVALID_FIELDS}); / <TMPL_LOOP NAME=INVALID_FIELDS>
UNKNOWN_FIELDS / $associate->param(q{UNKNOWN_FIELDS}); / <TMPL_LOOP NAME=UNKNOWN_FIELDS>
MSGS_FIELDS / $associate->param(q{MSGS_FIELDS}); / <TMPL_LOOP NAME=MSGS_FIELDS>
Variables
VALID_ParamA / $associate->param(q{VALID_ParamA}); / <TMPL_VAR NAME=VALID_ParamA>
MISSING_ParamB / $associate->param(q{MISSING_ParamB}); / <TMPL_VAR NAME=MISSING_ParamB>
INVALID_ParamC / $associate->param(q{INVALID_ParamC}); / <TMPL_VAR NAME=INVALID_ParamC>
UNKNOWN_ParamD / $associate->param(q{UNKNOWN_ParamD}); / <TMPL_VAR NAME=UNKNOWN_ParamD>
MSGS_prefix_ParamE / $associate->param(q{MSGS_prefix_ParamE}); / <TMPL_VAR NAME=MSGS_prefix_ParamE>
Inside Array / Loops we have the following structure:
Perl
VALID_FIELDS => [ { FIELD_NAME => X }, FIELD_VALUE => Y }, ... ]
Template
<TMPL_LOOP NAME=VALID_FIELDS>
<TMPL_VAR NAME=FIELD_NAME>
<TMPL_VAR NAME=FIELD_VALUE>
</TMPL_LOOP>
For further explanation on what the VALID,MISSING,INVALID,UNKNOWN AND MSGS are
please refer to Data::FormValidator::Results. Please note that MSGS
works somewhat diffrently then others and corresponds to $results->msgs([$config])
interface.
Map Data::FormValidator::Results object into a form suitable for use by HTML::Template
If you find any please report to author.
Alex Pavlovic
alex.pavlovic@taskforce-1.com
http://www.taskforce-1.com
This program is free software; you can redistribute
it and/or modify it under the same terms as Perl itself.
The full text of the license can be found in the
LICENSE file included with this module.
HTML::Template::Associate HTML::Template::Associate::DBI perl(1).
Usage : $associate->init ( $results, $extra_arguments );
Purpose : Initiliazes the object
Returns : concrete object instance
Argument : Data::FormValidator::Results instance and extra hash of arguments passed to factory
Comments : Factory class will call this method automatically during concrete object construction
: Error is thrown depending whether the passed in results object is of correct type
See Also : HTML::Template::Associate Data::FormValidator::Results
Usage : used internally to assign various prefixes/names to variables and loops