Ecosyste.ms: Awesome

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

Awesome Lists | Featured Topics | Projects

https://github.com/jhthorsen/mojolicious-plugin-namespaceform

Support foo.0.bar params
https://github.com/jhthorsen/mojolicious-plugin-namespaceform

Last synced: 27 days ago
JSON representation

Support foo.0.bar params

Awesome Lists containing this project

README

        

NAME
Mojolicious::Plugin::NamespaceForm - Support foo.0.bar params

VERSION
0.01

DESCRIPTION
This plugin makes it easier to work with multiple forms on a webpages.

This plugins solves the problem related to validation and automatic form
filling. That logic is based on the name of the form field, meaning you
need to provide unique names for each form of the same type, unless you
want confusing error messages displayed to the user.

Example
The forms below is supposed to illustrate the problem:


New product


Product name:
Add

Existing product


Product name:
Update

How does it work?
This plugin works by wrapping around most of the built in form helpers
with extra logic for generating the name of the input field. The helpers
below is overridden by default, but the list will probably get longer in
the future.

check_box
hidden_field
label_for
number_field
password_field
radio_button
select_field
text_area
text_field
url_field

SYNOPSIS
Single object
Application/controller logic:

use Mojolicious::Lite;
plugin 'Mojolicious::Plugin::NamespaceForm';

post '/user' => sub {
my $self = shift;
my $user = $self->namespace_params('user')->single;

# $user = { email => '...', name => '...', _index => 42 }
};

Template:

% stash field_namespace => 'user';
% stash field_index => 42; # optional
%= text_field 'email';
%= text_field 'name';

Output:


Multiple objects
post '/users' => sub {
my $self = shift;
my @users = @{ $self->namespace_params('user') };

# @users = (
# { email => '...', name => '...', _index => 0 },
# { email => '...', name => '...', _index => 1 },
# );

for my $user (@users) {
# ...
}
};

Template:

% stash field_namespace => 'user';
% stash field_index => 0;
% for my $user (@$users) {
%= text_field 'email';
%= text_field 'name';
% stash->{field_index}++;
% }

Output:





...

HELPERS
namespace_params
$obj = $self->namespace_params($namespace);
@list_of_hashes = @$obj;
$hash_ref = $obj->single; # might die
$hash_ref = $obj->get($index); # might return undef

The $obj is overloaded in list context: It will return a list of
hash-refs ordered by "_index".

See "NAMESPACE OBJECT METHODS" for more details.

METHODS
register
$self->register(helpers => [qw( input_tag )]);

Will register "HELPERS" and override tag helpers.

NAMESPACE OBJECT METHODS
get
$hash_ref = $self->get($index);

Return a given hash ref by index, or undef if no such index is defined.

single
$hash_ref = $self->single;

This method will die if no data exists for form namespace or if there
are more than one item. The index does not matter.

AUTHOR
Jan Henning Thorsen - "[email protected]"