Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/sshaw/mojolicious-plugin-paramexpand

Turns request parameters into nested data structures using CGI::Expand.
https://github.com/sshaw/mojolicious-plugin-paramexpand

mojolicious parameters perl www

Last synced: about 1 month ago
JSON representation

Turns request parameters into nested data structures using CGI::Expand.

Awesome Lists containing this project

README

        

=pod

=head1 NAME

Mojolicious::Plugin::ParamExpand - Use objects and data structures in your forms

=head1 SYNOPSIS

# Mojolicious
$self->plugin('ParamExpand', %options);

# Mojolicious::Lite
plugin 'ParamExpand', %options;

# In your action
sub action
{
my $self = shift;
my $order = $self->param('order');
$order->{address};
$order->{items}->[0]->{id};
$order->{items}->[0]->{price};
# ...
}

=head1 DESCRIPTION

L turns request parameters into nested data
structures using L.

=head1 MOJOLICIOUS VERSION

=head2 Less than 2.52

Due to the old way C handled multi-valued request parameters
versions prior to 2.52 will not work with this plugin. If this is a problem for
you try L.

=head2 Greater than 5.57

L no longer returns an array.
You must call L.

=head1 OPTIONS

Options must be specified when loading the plugin.

=head2 separator

$self->plugin('ParamExpand', separator => ',')

The character used to separate the data structure's hierarchy in the
flattened parameter. Defaults to C<'.'>.

=head2 max_array

$self->plugin('ParamExpand', max_array => 10)

Maximum number of array elements C will create.
Defaults to C<100>. If a parameter contains more than C
elements an exception will be raised.

To force the array into a hash keyed by its indexes set this to C<0>.

=head1 Methods

=head2 param

This is just L but, when using C, a
request with the parameters

users.0.name=nameA&users.1.name=nameB&id=123

will return a nested data structure for the param C<'users'>

@users = $self->param('users');
$users[0]->{name};
$users[1]->{name};

Other parameters can be accessed as usual

$id = $self->param('id');

The flattened parameter name can also be used

$name0 = $self->param('users.0.name');

=head3 Arguments

C<$name>

The name of the parameter.

=head3 Returns

The value for the given parameter. If applicable it will be an expanded
data structure.

Top level arrays will be returned as arrays B as array references.
This is how C behaves. In other words

users.0=userA&users.1=userB

is equivlent to

users=userA&users=userB

If this is undesirable you could L<< set C to zero|/max_array >>.

=head1 SEE ALSO

L, L, L

=head1 COPYRIGHT

Copyright (c) 2012-2016 Skye Shaw.

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