I had a similar problem yesterday (and found this thread while doing a bit of research) but found an alternative solution in the module docs and thought I'd write it up here for the next time someone searches.
From the docs:
Multiple constraints can be applied to a single field by defining the value of the constraint to be an array reference.
I needed to (sort of) check the validity of an email address and make sure that the address' owner was not already registered.
To complicate matters a bit further, I needed to check that the entry in a field to confirm the email address matched.
Here's an abridged version of the form profile I used. It presupposes the existence of a Class::DBI derived package that knows about users:
my $profile = {
required => [ qw(
user_name
user_email
user_email_confirm
# more stuff here...
) ],
msgs => {
prefix => q[e_],
constraints => {
# helpful error messages:
user_email_valid => q[Invalid address],
user_email_lookup => q[Already registered],
emails_match => q[Emails don't match],
},
},
# tidy entries:
filters => ['trim','strip'],
constraints => {
user_email => [
{
name => q[user_email_valid],
constraint => q[email],
},
{
name => q[user_email_lookup],
constraint => sub {
# have a look in database:
!My::Content::User->search(
user_email => $_[0],
);
},
params => [ qw(
user_email
) ],
}
],
user_email_confirm => {
name => q[emails_match],
constraint => sub { $_[0] eq $_[1] },
params => [ qw(
user_email
user_email_confirm
) ],
},
# more constraints, perhaps...
},
};
HTH someone,
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.