Masayuki Matsuki > HTML-Shakan > HTML::Shakan

Download:
HTML-Shakan-2.00.tar.gz

Dependencies

Annotate this POD

Website

View/Report Bugs
Module Version: 2.00   Source  

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) { ?><div class="error"><?= $form->error_message() ?></div><? } ?>
    <form method="post" action="add">
    <?= $form->render() ?>
    <p><input type="submit" value="add" /></p>
    </form>

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 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

左官 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

ToscaWidgets

LICENSE ^

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

syntax highlighting: