Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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
- Host: GitHub
- URL: https://github.com/jhthorsen/mojolicious-plugin-namespaceform
- Owner: jhthorsen
- Created: 2013-11-24T19:04:43.000Z (about 11 years ago)
- Default Branch: master
- Last Pushed: 2013-11-24T19:04:52.000Z (about 11 years ago)
- Last Synced: 2024-10-16T11:58:42.571Z (3 months ago)
- Language: Perl
- Size: 102 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README
- Changelog: Changes
Awesome Lists containing this project
README
NAME
Mojolicious::Plugin::NamespaceForm - Support foo.0.bar paramsVERSION
0.01DESCRIPTION
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_fieldSYNOPSIS
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 undefThe $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]"