Code Monkey home page Code Monkey logo

formvalidator-lite's Introduction

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;
use FormValidator::Lite::Constraint;

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 :

use FormValidator::Lite qw("+MyApp::Validator::Constraint");

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 :

      use FormValidator::Lite qw/Date Email/;
    

    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 by build_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 or set_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.

formvalidator-lite's People

Contributors

bayashi avatar dayflower avatar fujiwara avatar gugod avatar magai avatar nekokak avatar oddmutou avatar soh335 avatar syohex avatar tokuhirom avatar tomill avatar typester avatar walf443 avatar yowcow avatar ysasaki avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.