Dancer::Plugin::DataTransposeValidator - Data::Transpose::Validator plugin for Dancer


Version 0.010


    use Dancer::Plugin::DataTransposeValidator;

    post '/' => sub {
        my $params = params;
        my $data = validator($params, 'rules-file');
        if ( $data->{valid} ) { ... }


Dancer plugin for for Data::Transpose::Validator


This module exports the single function validator.

validator( $params, $rules_file, @additional_args )

Arguments should be a hash reference of parameters to be validated and the name of the rules file to use. Any @additional_args are passed as arguments to the rules file only if it is a code reference. See "RULES FILE".

A hash reference with the following keys is returned:

  • valid

    A boolean 1/0 showing whether the parameters validated correctly or not.

  • values

    The transposed values as a hash reference.

  • errors

    A hash reference containing one key for each parameter which failed validation. See "errors_hash" in "CONFIGURATION" for an explanation of what the value of each parameter key will be.

  • css

    A hash reference containing one key for each parameter which failed validation. The value for each parameter is a css class. See "css_error_class" in "CONFIGURATION".


The rules file format allows the "validator" to be configured using all options available in Data::Transpose::Validator. The rules file must contain a valid hash reference, e.g.:

        options => {
            stripwhite => 1,
            collapse_whitespace => 1,
            requireall => 0,
            unknown => "fail",
            missing => "undefine",
        prepare => {
            email => {
                validator => "EmailValid",
                required => 1,
            email2 => {
                validator => {
                    class => "MyValidator::EmailValid",
                    absolute => 1,
            field4 => {
                validator => {
                    sub {
                        my $field = shift;
                        if ( $field =~ /^\d+/ && $field > 0 ) {
                            return 1;
                        else {
                            return ( undef, "Not a positive integer" );

Note that the value of the prepare key must be a hash reference since the array reference form of "prepare" in Data::Transpose::Validator is not supported.

As an alternative the rules file can contain a code reference, e.g.:

    sub {
        my $username = shift;
        return {
            options => {
                stripwhite => 1,
            prepare => {
                password => {
                    validator => {
                        class => 'PasswordPolicy',
                        options => {
                            username  => $username,
                            minlength => 8,

The code reference receives the @additional_args passed to "validator". The code reference must return a valid hash reference.


The following configuration settings are available (defaults are shown here):

        css_error_class: has-error
        errors_hash: 0
        rules_dir: validation


The class returned as a value for parameters in the css key of the hash reference returned by "validator".


This can has a number of different values:

  • A false value (the default) means that only a single scalar error string will be returned for each parameter error. This will be the first error returned for the parameter by "errors_hash" in Data::Transpose::Validator.

  • joined

    All errors for a parameter will be returned joined by a full stop and a space.

  • arrayref

    All errors for a parameter will be returned as an array reference.


Subdirectory of "appdir" in Dancer::Config in which rules files are stored.


Alexey Kolganov for Dancer::Plugin::ValidateTiny which inspired a number of aspects of this plugin.


Dancer::Plugin::ValidateTiny Dancer::Plugin::FormValidator Dancer::Plugin::DataFu


Peter Mottram (SysPete), <>


Slaven Rezić (SREZIC), <>


Copyright 2015-2016 Peter Mottram (SysPete).

This program is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.