NAME
FormValidator::Lite - lightweight form validation library
SYNOPSIS
use
FormValidator::Lite;
FormValidator::Lite->load_constraints(
qw/Japanese/
);
my
$q
= CGI->new();
my
$validator
= FormValidator::Lite->new(
$q
);
$validator
->load_function_message(
'en'
);
my
$res
=
$validator
->check(
name
=> [
qw/NOT_NULL/
],
name_kana
=> [
qw/NOT_NULL KATAKANA/
],
{
mails
=> [
qw/mail1 mail2/
]} => [
'DUPLICATION'
],
);
if
( ..... return_true_if_error() ..... ) {
$validator
->set_error(
'login_id'
=>
'DUPLICATION'
);
}
if
(
$validator
->has_error) {
...
}
# in your template
<ul>
?
for
my
$msg
(
$validator
->get_error_messages) {
<li><?=
$msg
?></li>
? }
</ul>
DESCRIPTION
FormValidator::Lite is a simple, fast implementation for form validation.
IT'S IN BETA QUALITY. API MAY CHANGE IN THE FUTURE.
HOW TO WRITE YOUR OWN CONSTRAINTS
Create your own constraint package as such :
package
MyApp::Validator::Constraint;
use
strict;
use
warnings;
rule
'IS_EVEN'
=>
sub
{
return
$_
% 2 ? 0 : 1;
};
rule
'IS_GREATER_THAN'
=>
sub
{
my
(
$min
) =
@_
;
return
$_
>=
$min
;
}
alias
'IS_GREATER_THAN'
=>
'IS_BIGGER_THAN'
;
1;
And in your controller :
my
$validator
= FormValidator::Lite->new(...);
$validator
->set_message_data(...);
$validator
->check(
some_param
=> [
'UINT'
,
'IS_EVEN'
, [
'IS_GREATER_THAN'
=> 42] ],
);
When defining a rule keep in mind that the value for the parameter comes from $_
and the additional arguments defined in your validation specifications come from @_
.
METHODS
- my $validator = FormValidator::Lite->new($q);
-
Create a new instance.
The constructor takes a mandatory argument
$q
that is a query-like object such as Apache::Request, CGI.pm, Plack::Request. The object MUST have a$q->param
method.EXPERIMENTAL: You can pass the hash value for
$q
. - $validator->query()
- $validator->query($query)
-
Getter/Setter for the query attribute.
- $validator->check(@specs_array)
-
Validate the query against a set of specifications defined in the
@specs_array
argument. In the most common case, the array is a sequence of pairs : the first item is the parameter name and the second item is an array reference with a list of constraint rules to apply on the query's value for the parameter.my
$res
=
$validator
->check(
name
=> [
qw/NOT_NULL/
],
name_kana
=> [
qw/NOT_NULL KATAKANA/
],
{
mails
=> [
qw/mail1 mail2/
]} => [
'DUPLICATION'
],
);
In the above example name is a parameter. NOT_NULL, KATAKANA and DUPLICATION are the names of the constraints.
- $validator->is_error($key)
-
Return true value if there is an error for the
$key
parameter. - $validator->is_valid()
-
Return true value if
$validator
didn't detect any error.This is the same as
!$validator->has_error()
. - $validator->has_error()
-
Return true value if
$validator
detects error.This is the same as
!$validator->is_valid()
. - $validator->set_error($param, $rule_name)
-
Manually set a new error for the parameter named
$param
. The rule's name is$rule_name
. - $validator->errors()
-
Return all the errors as a hash reference where the keys are the parameters and the values are a hash reference with the failing constraints.
{
'foo'
=> {
'NOT_NULL'
=> 1,
'INT'
=> 1 },
'bar'
=> {
'EMAIL'
=> 1, },
}
- $validator->load_constraints($name)
-
$validator
->load_constraints(
"DATE"
,
"Email"
);
# or load your own constraints
$validator
->load_constraints(
"+MyApp::FormValidator::Lite::Constraint"
);
You can also load the constraints during import :
Load constraint components named
"FormValidator::Lite::Constraint::${name}"
.By default, You can use only constraints defined by FormValidator::Lite::Constraint::Default.
- $validator->load_function_message($lang)
-
$validator
->load_function_message(
'ja'
);
Load function message file.
Currently, FormValidator::Lite::Messages::ja and FormValidator::Lite::Messages::en are available.
- $validator->set_param_message($param => $message, ...)
-
$validator
->set_param_message(
name
=>
'Your Name'
,
);
Add a message-friendly description for the parameter.
- $validator->set_message("$param.$func" => $message)
-
$v
->set_message(
'zip.jzip'
=>
'Please input correct zip number.'
);
Set an error message for a given $param and $func pair.
- $validator->set_message_data({ message => $msg, param => $param, function => $function })
-
$v
->set_message_data(YAML::Load(<<
'...'
));
---
message:
zip.jzip: Please input correct zip number.
param:
name: Your Name
function:
not_null:
"[_1] is empty"
hiragana:
"[_1] is not Hiragana"
...
Set the error message map. In the 'function' and 'message' sections,
[_1]
will be replaced bybuild_message
with the description of the failing parameter provided in the 'param' section. $validator->build_message($tmpl, @args)
-
replace [_1] in
$tmpl
by@args
.Setup error message map.
$validator->set_message("$param.$func" => $message)
-
$v
->set_message(
'zip.jzip'
=>
'Please input correct zip number.'
);
Note that it will void any previous calls to
load_function_message
,set_message
orset_param_message
. - my @errors = $validator->get_error_messages()
- my $errors = $validator->get_error_messages()
-
Get all the error messages for the query. This method returns an array in list context and an array reference otherwise.
- my $msg = $validator->get_error_message($param => $func)
-
Generate the error message for parameter
$param
and function$func
. - my @msgs = $validator->get_error_messages_from_param($param)
-
Get all the error messages for the parameter
$param
.
WHY NOT FormValidator::Simple?
Yes, I know. This module is very similar with FV::S.
But, FormValidator::Simple is too heavy for me. FormValidator::Lite is fast!
Perl: 5.010000
FVS: 0.23
FVL: 0.02
Rate FormValidator::Simple FormValidator::Lite
FormValidator::Simple 353/s -- -75%
FormValidator::Lite 1429/s 304% --
AUTHOR
Tokuhiro Matsuno <tokuhirom AAJKLFJEF@ gmail.com>
THANKS TO
craftworks
nekokak
tomi-ru
SEE ALSO
FormValidator::Simple, Data::FormValidator, HTML::FormFu
LICENSE
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.