=head1 NAME
Mojolicious::Plugin::ValidateTiny - Lightweight validator for Mojolicious
=head1 SYNOPSIS
# Mojolicious
$self->plugin('ValidateTiny');
# Mojolicious::Lite
plugin 'ValidateTiny';
sub action {
my $self = shift;
my $validate_rules = [
# All of these are required
[qw/name email pass pass2/] => is_required(),
# pass2 must be equal to pass
pass2 => is_equal('pass'),
# custom sub validates an email address
email => sub {
my ( $value, $params ) = @_;
Email::Valid->address($value) ? undef : 'Invalid email';
}
];
return unless $self->do_validation($validate_rules);
... Do something ...
}
sub action2 {
my $self = shift;
my $validate_rules = {
checks => [...],
fields => [...],
filters => [...]
};
if ( my $filtered_params = $self->do_validation($validate_rules) ) {
# all $params are validated and filters are applyed
... do your action ...
} else {
my $errors = $self->validator_error; # hash with errors
my $pass_error = $self->validator_error('password'); # password error text
my $any_error = $self->validator_any_error; # any error text
$self->render( status => '403', text => $any_error );
}
}
__DATA__
@@ user.html.ep
%= if (validator_has_errors) {
Please, correct the errors below.
% }
%= form_for 'user' => begin
<%= input_tag 'username' %>
<%= validator_error 'username' %>
<%= submit_button %>
% end
=head1 DESCRIPTION
L is a L support for L.
=head1 OPTIONS
=head2 C (default 0)
If "explicit" is true then for every field must be provided check rule
=head2 C (default 1)
If "autofields" then validator will automatically create fields list based on passed checks.
So, you can pass:
[
user => is_required(),
pass => is_required(),
]
instead of
{
fields => ['user', 'pass'],
checks => [
user => is_required(),
pass => is_required(),
]
}
=head2 C (default [])
Is an arrayref with a list of fields that will be never checked.
For example, if you use "Mojolicious::Plugin::CSRFProtect" then you should add "csrftoken" to exclude list.
=head1 HELPERS
=head2 C
Validates parameters with provided rules and automatically set errors.
$VALIDATE_RULES - Validate::Tiny rules in next form
{
checks => $CHECKS, # Required
fields => [], # Optional (will check all GET+POST parameters)
filters => [], # Optional
}
You can pass only "checks" arrayref to "do_validation".
In this case validator will take all GET+POST parameters as "fields"
returns false if validation failed
returns true if validation succeded
$self->do_validation($VALIDATE_RULES)
$self->do_validation($CHECKS);
=head2 C
Check if there are any errors.
if ($self->validator_has_errors) {
$self->render_text( $self->validator_any_error );
}
%= if (validator_has_errors) {
Please, correct the errors below.
% }
=head2 C
Returns the appropriate error.
my $errors_hash = $self->validator_error();
my $username_error = $self->validator_error('username');
<%= validator_error 'username' %>
=head2 C
Returns any of the existing errors. This method is usefull if you want return only one error.
=head1 AUTHOR
Viktor Turskyi
=head1 BUGS
Please report any bugs or feature requests to Github L
=head1 SEE ALSO
L, L, L
=cut