Sponsoring The Perl Toolchain Summit 2025: Help make this important event another success Learn more

NAME

Kelp::Module::ValidateTiny - Validate parameters in a Kelp Route Handler

VERSION

Version 0.01

SYNOPSIS

# inside your Kelp config file
{
modules => [ qw{SomeModule Validate::Tiny} ],
modules_init => {
...
,
# :all will import everything
# no need to list MyApp here
'Validate::Tiny' => {
subs => [ qw{is_required is_required_id} ],
into => [ qw{MyApp::OtherRouteClass} ],
}
}
}
...
#inside a Kelp route
my $vt_rules = {
fields => [...],
filters => [...],
checks => [...],
};
my $result = $self->validate($vt_rules)
# $result is a Validate::Tiny object
# process $result
...
# render the template form.tt if validation fails
# $errors and valid values are automatically passed,
# to the template, but you can optionally pass some
# more data to that template
my $result = $self->validate($rules,
on_error => 'form.tt',
data => {
message => 'You could try something else'
},
);
# If validation fails, $result is an instance of
# Validate::Tiny::PlackResponse and has a response
# method that can be sent
return $result->response unless $result->success
# All data is valid here.
# use $result->data

DESCRIPTION

Kelp::Module::ValidateTiny adds Validate::Tiny's validator to your Kelp application.

METHODS

validate

This is the only method decorating $self. You can call it in three ways:

First you can pass it just a valid Validate::Tiny $rules hash reference. It will return a Validate::Tiny object and you can call all the usual V::T methods on it.

my $result = $self->validate($rules);
# $result is now a Validate::Tiny object

Second you can pass it a name ('on_error') and value (a template filename) pair. If your data passed the validation, the return value is the usual V::T object. However, if validation fails, the validate method returns an object that has a "response" method in addition to all the Validate::Tiny methods.

my $result = $self->validate(
$rules,
on_error => 'form'
);
return $result->response unless $result->success # form.tt rendered
...
# Your data was valid here
...
# Return some other response

Note that calling $result->response if your validations succeeded is a fatal error. The template (form.tt in the code above) is rendered with a hashref that contains the key-value pairs of valid parameters plus a key "error" that points to another hashref with names of invalid parameters as keys and the corresponding error messages as values. So if your parameters were

{id => 41, lang => 'Perl', version => '5.10'}

and id was found to be invalid with your rules/checks, then the template 'form.tt' renderer is passed the following hashref:

{
lang => 'Perl',
version => '5.10',
error {
id => 'The answer is 42, not 41',
}
}

This can be useful with a construct like [% error.name || name %] in your template.

Third, you can pass some additional values that will be passed "as is"" to the on_fail template

$self->validate($rules,
on_error => 'form.tt',
data => {
message => 'You could try something else next time!'
},
);

Here the caller passes an additional key data so that your on_error template renderer gets the following hash ref

{
lang => 'Perl',
version => '5.10',
error {
id => 'The answer is 42, not 41',
},
message => 'You could try something else next time!'
}

AUTHOR

Gurunandan R. Bhat <gbhat@pobox.com>

COPYRIGHT

Copyright 2013- Gurunandan R. Bhat

LICENSE

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

SEE ALSO

Kelp, Kelp::Module, Validate::Tiny