Re: [dfv] custom error messages on a per-field basis
Status: Inactive
Brought to you by:
markjugg
From: Michael P. <mp...@pl...> - 2006-10-26 16:06:44
|
Brian E. Lozier wrote: > I would like to specify that if a certain field doesn't pass the > "email" rule, it gets a different error message than the defalt > "invalid." However, I want it to only affect one field, not all > fields with the "email" constraint. > > The description above states that this is possible, but I can't find > it in the documentation. I don't believe it's there explicitly. > I can see a place where I can set a custom error message for each > individual constraint, but not for a specific field with a specific > constraint. > > Is this currently possible? Yes. I usually do this like so (using CGI::Application and C::A::Plugin::ValidateRM) __PACKAGE__->add_callback( init => sub { my $self = shift; $self->param( 'dfv_defaults' => { filters => ['trim'], msgs => \&_create_dfv_msgs, untaint_all_constraints => 1, } ); } ); sub _create_dfv_msgs { my $dfv = shift; my %msgs; # if there's anything wrong if ( !$dfv->success ) { # add 'any_errors' $msgs{any_errors} = 1; if ( $dfv->has_invalid ) { # add any error messages for failed (possibly named) constraints foreach my $failed ( $dfv->invalid ) { $msgs{"err_$failed"} = 1; $msgs{"invalid_$failed"} = 1; my $names = $dfv->invalid($failed); foreach my $name (@$names) { next if ( ref $name ); # skip regexes $msgs{"invalid_$name"} = 1; } } } # now add for missing if ( $dfv->has_missing ) { foreach my $missing ( $dfv->missing ) { $msgs{"err_$missing"} = 1; $msgs{"missing_$missing"} = 1; $msgs{'has_missing'} = 1; } } } return \%msgs; } This code comes straight from Smolder (http://sourceforge.net/projects/smolder). The idea is to not have the msgs build actual error message, but create error flags that are used in the templates. So an invalid field named 'email' will get a flag named 'invalid_email' and the template checks which error messages to show based on these flags. This also allows us to have multiple constraints on the same fields and have different error messages for the same field depending on which constraint fails. HTH -- Michael Peters Developer Plus Three, LP |