NAME
Dancer2::Plugin::FormValidator - validate incoming request in declarative way.
VERSION
version 0.11
SYNOPSIS
use Dancer2::Plugin::FormValidator;
use App::Http::Validators::Form;
post '/form' => sub {
if (my $valid_hash_ref = validate_form 'form') {
save_user_input($valid_hash_ref);
redirect '/success_page';
}
redirect '/form';
};
DISCLAIMER
This is not stable version!
Please dont rely on it. Interfaces would be changed in future, except of dsl keywords signatures.
If you like it - add it to your bookmarks. I intend to complete the development by the summer 2022.
Have any ideas? Find this project on github (repo ref is at the bottom).
DESCRIPTION
This is micro-framework that provides validation in your Dancer2 application. It consists of dsl's keywords and a set of agreements. It is build around Data::FormValidator.
Uses two approaches: declarative and verbose with more control.
Validator
First, you need to create class which will implements at least one main role: Dancer2::Plugin::FormValidator::Role::HasProfile.
This role requires profile method which should return a HashRef Data::FormValidator accepts:
package App::Http::Validators::RegisterForm {
use Moo;
use Data::FormValidator::Constraints qw(:closures);
with 'Dancer2::Plugin::FormValidator::Role::HasProfile';
sub profile {
return {
required => [qw(name email)],
constraint_methods => {
email => email,
}
};
};
}
Declarative approach
Then you need to set an form => validator association in config:
set plugins => {
FormValidator => {
session => {
namespace => '_form_validator' # This is required field
},
forms => {
register_form => 'App::App::Http::Validators::RegisterForm',
},
},
};
Now you can validate POST parameters in your controller:
use Dancer2::Plugin::FormValidator;
use App::Http::Validators::RegisterForm;
post '/register' => sub {
if (my $valid_hash_ref = validate_form 'register_form') {
if (login($valid_hash_ref)) {
redirect '/success_page';
}
}
redirect '/register';
};
In you template you have access to $errors - this is hash with parameters names as keys and error messages as values like:
{
name => '<span>Name is missing.</span>',
email => '<span>Email is invalid.</span>'
}
CONFIGURATION
...
plugins:
FormValidator:
session:
namespace: '_form_validator' # this is required
messages:
missing: '<span>%s is missing.</span>' # default is '%s is missing.'
invalid: '<span>%s is invalid.</span>' # default is '%s is invalid.'
ucfirst: 1 # this is default
forms:
login_form: 'App::Http::Validators::LoginForm'
support_form: 'App::Http::Validators::SupportForm'
...
...
DSL KEYWORDS
validate HashRef:$input => Object:$validator
validate_form String:$form
TODO
- Configuration details: list all fields and describe them.
- Document Result object.
- Document all Dsl.
- Document all Verbose approach.
- Document all Roles and HashRef structures.
- Template test $errors.
BUGS AND LIMITATIONS
If you find one, please let me know.
SOURCE CODE REPOSITORY
https://github.com/AlexP007/dancer2-plugin-formvalidator.
AUTHOR
Alexander Panteleev <alexpan at cpan dot org>.
LICENSE AND COPYRIGHT
This software is copyright (c) 2022 by Alexander Panteleev. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.