Mojolicious::Plugin::ParamExpand - Use objects and data structures in your forms
# 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}; # ... }
Mojolicious::Plugin::ParamExpand turns request parameters into nested data structures using CGI::Expand.
Due to the old way Mojolicious::Controller handled multi-valued request parameters versions prior to 2.52 will not work with this plugin. If this is a problem for you try Mojolicious::Plugin::GroupedParams.
Mojolicious::Controller
"param" in Mojolicious::Controller no longer returns an array. You must call "every_param" in Mojolicious::Controller.
Options must be specified when loading the plugin.
$self->plugin('ParamExpand', separator => ',')
The character used to separate the data structure's hierarchy in the flattened parameter. Defaults to '.'.
'.'
$self->plugin('ParamExpand', max_array => 10)
Maximum number of array elements CGI::Expand will create. Defaults to 100. If a parameter contains more than max_array elements an exception will be raised.
CGI::Expand
100
max_array
To force the array into a hash keyed by its indexes set this to 0.
0
This is just "param" in Mojolicious::Controller but, when using Mojolicious::Plugin::ParamExpand, a request with the parameters
Mojolicious::Plugin::ParamExpand
users.0.name=nameA&users.1.name=nameB&id=123
will return a nested data structure for the param 'users'
'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');
$name
The name of the parameter.
The value for the given parameter. If applicable it will be an expanded data structure.
Top level arrays will be returned as arrays not as array references. This is how Mojolicious behaves. In other words
Mojolicious
users.0=userA&users.1=userB
is equivlent to
users=userA&users=userB
If this is undesirable you could set max_array to zero.
CGI::Expand, Mojolicious::Plugin::GroupedParams
To install Mojolicious::Plugin::ParamExpand, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Mojolicious::Plugin::ParamExpand
CPAN shell
perl -MCPAN -e shell install Mojolicious::Plugin::ParamExpand
For more information on module installation, please visit the detailed CPAN module installation guide.