[![Build Status](https://travis-ci.org/Songmu/html-shakan.svg?branch=master)](https://travis-ci.org/Songmu/html-shakan) [![Coverage Status](https://img.shields.io/coveralls/Songmu/html-shakan/master.svg?style=flat)](https://coveralls.io/r/Songmu/html-shakan?branch=master)
# NAME
HTML::Shakan - Form HTML generator/validator
# SYNOPSIS
use HTML::Shakan;
sub form {
my $req = shift;
HTML::Shakan->new(
fields => [ @_ ],
request => $req,
model => 'DataModel',
);
}
sub edit {
my $req = shift;
my $row = $model->get('user' => $req->param('id'));
my $form = form(
$req => (
TextField(name => 'name', label => 'Your name', filter => [qw/WhiteSpace/]),
EmailField(name => 'email', label => 'Your email'),
),
);
if ($req->submitted_and_valid) {
$form->model->update($row);
redirect('edit_thanks');
} else {
$form->model->fill($row);
render(form => $form);
}
}
sub add {
my $req = shift;
my $form = form(
$req => (
TextField(name => 'name', label => 'Your name'),
EmailField(name => 'email', label => 'Your email'),
)
);
if ($req->submitted_and_valid) {
$form->model->insert($model => 'user');
redirect('edit_thanks');
}
render(form => $form);
}
# in your template
if ($form->has_error) { ?>
= $form->error_message() ?>
} ?>
# DESCRIPTION
HTML::Shakan is yet another form generator.
THIS IS BETA.API WILL CHANGE.
# ATTRIBUTES
- `custom_validation`
form 'login' => (
fields => [
TextField(name => 'login_id'),
PasswordField(name => 'login_pw'),
],
custom_validation => sub {
my $form = shift;
if ($form->is_valid && !MyDB->retrieve($form->param('login_id'), $form->param('login_pw'))) {
$form->set_error('login' => 'failed');
}
}
);
You can set custom validation callback, validates the field set in the form. For example, this is useful for login form.
- `submitted`
Returns true if the form has been submitted.
This attribute will return true if a value for any known field name was submitted.
- `has_error`
Return true if request has an error.
- `submitted_and_valid`
Shorthand for `$form->submitted && !$form->has_error`
- `params`
Returns form parameters. It is [Hash::MultiValue](https://metacpan.org/pod/Hash::MultiValue) object.
# benchmarking
form generation
Rate formfu shakan shakan_declare
formfu 1057/s -- -77% -84%
shakan 4695/s 344% -- -31%
shakan_declare 6757/s 539% 44% --
# What's shakan
Shakan is 左官 in Japanese.
If you want to know about shakan, please see [http://ja.wikipedia.org/wiki/%E5%B7%A6%E5%AE%98](http://ja.wikipedia.org/wiki/%E5%B7%A6%E5%AE%98)
左官 should pronounce 'sakan', formally. but, edokko pronounce 左官 as shakan.
# METHODS
- `my $html = $shakan->render(); :Str`
Render form.
- `$shakan->render_field($name); :Str`
Render partial form named `<$name`>.
- `$shakan->param($key:Str); :Value[s]`
Retrive the value of the key from parameters. It's behaviour is similar to traditional request objects. (ex. CGI, Plack::Request)
That is, it returns single scalar at scalar context and returns array at array context.
# AUTHOR
Tokuhiro Matsuno <tokuhirom @ gmail.com>
# SEE ALSO
[HTML::FormFu](https://metacpan.org/pod/HTML::FormFu)
ToscaWidgets
# LICENSE
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.