Mojolicious-Plugin-FormFields
view release on metacpan or search on metacpan
=pod
=head1 NAME
Mojolicious::Plugin::FormFields - Lightweight form builder with validation and filtering
=head1 SYNOPSIS
$self->plugin('FormFields');
# In your controller
sub edit
{
my $self = shift;
my $user = $self->users->find($self->param('id'));
$self->stash(user => $user);
}
sub update
{
my $self = shift;
my $user = $self->params('user');
$self->field('user.name')->is_required;
$self->field('user.password')->is_required->is_equal('user.confirm_password');
if($self->valid) {
$self->users->save($user);
$self->redirect_to('/profile');
return;
}
$self->stash(user => $user);
}
# In your view
field('user.name')->text
field('user.name')->error unless field('user.name')->valid
field('user.password')->password
field('user.age')->select([10,20,30])
field('user.password')->password
field('user.taste')->radio('me_gusta')
field('user.taste')->radio('estoy_harto_de')
field('user.orders.0.id')->hidden
# Fields for a collection
my $kinfolk = field('user.kinfolk');
for my $person (@$kinfolk) {
$person->hidden('id')
$person->text('name')
}
# Or, scope it to the 'user' param
my $user = fields('user')
$user->hidden('id')
$user->text('name')
$user->error('name') unless $user->valid('name')
$user->label('admin')
$user->checkbox('admin')
$user->password('password')
$user->select('age', [ [X => 10], [Dub => 20] ])
$user->file('avatar')
$user->textarea('bio', size => '10x50')
my $kinfolk = $user->fields('kinfolk')
for my $person (@$kinfolk) {
$person->text('name')
# ...
}
=head1 DESCRIPTION
C<Mojolicious::Plugin::FormFields> allows you to bind objects and data structures to form fields. It also performs validation and filtering via L<Validate::Tiny>.
=head1 CREATING FIELDS
Fields can be bound to a hash, an array, something blessed, or any combination of the three.
They are created by calling the C<< L</field> >> helper with a path to the value you want to bind,
( run in 1.034 second using v1.01-cache-2.11-cpan-0d23b851a93 )