NAME

Mojolicious::Validator::Validation - Perform validations

SYNOPSIS

use Mojolicious::Validator;
use Mojolicious::Validator::Validation;

my $validator = Mojolicious::Validator->new;
my $v = Mojolicious::Validator::Validation->new(validator => $validator);
$v->input({foo => 'bar'});
$v->required('foo')->in('bar', 'baz');
say $v->param('foo');

DESCRIPTION

Mojolicious::Validator::Validation performs Mojolicious::Validator validation checks.

ATTRIBUTES

Mojolicious::Validator::Validation implements the following attributes.

csrf_token

my $token = $v->csrf_token;
$v        = $v->csrf_token('fa6a08...');

CSRF token.

input

my $input = $v->input;
$v        = $v->input({foo => 'bar', baz => [123, 'yada']});

Data to be validated.

output

my $output = $v->output;
$v         = $v->output({foo => 'bar', baz => [123, 'yada']});

Validated data.

topic

my $topic = $v->topic;
$v        = $v->topic('foo');

Name of field currently being validated.

validator

my $v = $v->validator;
$v    = $v->validator(Mojolicious::Validator->new);

Mojolicious::Validator object this validation belongs to.

METHODS

Mojolicious::Validator::Validation inherits all methods from Mojo::Base and implements the following new ones.

check

$v = $v->check('size', 2, 7);

Perform validation check on all values of the current "topic", no more checks will be performed on them after the first one failed. All checks from "CHECKS" in Mojolicious::Validator are supported.

csrf_protect

$v = $v->csrf_protect;

Validate csrf_token and protect from cross-site request forgery.

error

my $err = $v->error('foo');
$v      = $v->error(foo => ['custom_check']);
$v      = $v->error(foo => [$check, $result, @args]);

Get or set details for failed validation check, at any given time there can only be one per field.

# Details about failed validation
my ($check, $result, @args) = @{$v->error('foo')};

# Force validation to fail for a field without performing a check
$v->error(foo => ['some_made_up_check_name']);

every_param

my $values = $v->every_param;
my $values = $v->every_param('foo');

Similar to "param", but returns all values sharing the same name as an array reference.

# Get first value
my $first = $v->every_param('foo')->[0];

failed

my $names = $v->failed;

Return an array reference with all names for values that failed validation.

# Names of all values that failed
say for @{$v->failed};

has_data

my $bool = $v->has_data;

Check if "input" is available for validation.

has_error

my $bool = $v->has_error;
my $bool = $v->has_error('foo');

Check if validation resulted in errors, defaults to checking all fields.

is_valid

my $bool = $v->is_valid;
my $bool = $v->is_valid('foo');

Check if validation was successful and field has a value, defaults to checking the current "topic".

optional

$v = $v->optional('foo');
$v = $v->optional('foo', @filters);

Change validation "topic" and apply filters. All filters from "FILTERS" in Mojolicious::Validator are supported.

# Trim value and check size
$v->optional('user', 'trim')->size(1, 15);

param

my $value = $v->param;
my $value = $v->param('foo');

Access validated values, defaults to the current "topic". If there are multiple values sharing the same name, and you want to access more than just the last one, you can use "every_param".

# Get value right away
my $user = $v->optional('user')->size(1, 15)->param;

passed

my $names = $v->passed;

Return an array reference with all names for values that passed validation.

# Names of all values that passed
say for @{$v->passed};

required

$v = $v->required('foo');
$v = $v->required('foo', @filters);

Change validation "topic", apply filters, and make sure a value is present. All filters from "FILTERS" in Mojolicious::Validator are supported.

# Trim value and check size
$v->required('user', 'trim')->size(1, 15);

CHECKS

In addition to the "ATTRIBUTES" and "METHODS" above, you can also call validation checks provided by "validator" on Mojolicious::Validator::Validation objects, similar to "check".

# Call validation checks
$v->required('foo')->size(2, 5)->like(qr/^[A-Z]/);
$v->optional('bar')->equal_to('foo');
$v->optional('baz')->in('test', '123');

# Longer version
$v->required('foo')->check('size', 2, 5)->check('like', qr/^[A-Z]/);

SEE ALSO

Mojolicious, Mojolicious::Guides, https://mojolicious.org.