NAME

Catalyst::Model::HTMLFormhandler - Proxy a directory of HTML::Formhandler forms

SYNOPSIS

package MyApp::Model::Form;

use Moose;
extends 'Catalyst::Model::HTMLFormhandler';

__PACKAGE__->config( form_namespace=>'MyApp::Form' );

And then using it in a controller:

my $form = $c->model("Form::Email");  # Maps to MyApp::Email via MyApp:Model::Email

# If the request is a POST, we process parameters automatically
if($form->is_valid) {
  ...
} else {
  ...
}

DESCRIPTION

Assuming a project namespace 'MyApp::Form' with HTML::Formhandler forms. like the following example:

package MyApp::Form::Email;

use HTML::FormHandler::Moose;

extends 'HTML::FormHandler';

has aaa => (is=>'ro', required=>1);
has bbb => (is=>'ro', required=>1);

has_field 'email' => (
  type=>'Email',
  size => 96,
  required => 1);

You create a single Catalyst model like this:

package MyApp::Model::Form;

use Moose;
extends 'Catalyst::Model::HTMLFormhandler';

__PACKAGE__->config( form_namespace=>'MyApp::Form' );

(Setting 'form_namespace' is optional, it defaults to the application namespace plus "::Form" (in this example case that would be "MyApp::Form").

When you start your application it will register one model for each form in the declared namespace. So in the above example you should see a model 'MyApp::Model::Form::Email'. This is a 'PerRequest' model since it does ACCEPT_CONTEXT, it will generate a new instance of the form object once per request scope.

You can set model configuration in the normal way, in your application general configuration:

package MyApp;
use Catalyst;

MyApp->config(
  'Model::Form::Email' => { aaa => 1000 }
);

MyApp->setup;

And you can pass additional args to the 'new' call of the form when you request the form model:

my $email = $c->model('Form::Email', bbb=>2000);

Additional args should be in the form of a hash, as in the above example.

The generated proxy will also add the ctx argument based on the current value of $c, although using this may not be a good way to build well, decoupled applications.

We offer two additional bit of useful suger:

If you pass argument 'action_from' with a value of an action object or an action private name that will set the form action value.

By default if the request is a POST, we will process the request arguments and return a form object that you can test for validity. If you don't want this behavior you can disable it by passing 'no_auto_process'. For example:

my $form = $c->model("Form::XXX", no_auto_process=>1)

ATTRIBUTES

This class defines the following attributes you may set via standard Catalyst configuration.

form_namespace

This is the target namespace that Module::Pluggable uses to look for forms. It defaults to 'MyApp::Form' (where 'MyApp' is you application namespace).

roles

A list of Moose::Roles that get applied automatically to each form model.

SPECIAL ARGUMENTS

You may pass the following special arguments to $c->model("Form::XXX") to influence how the form object is setup.

no_auto_process

Turns off the call to ->process when the request is a POST.

AUTHOR

John Napiorkowski email:jjnapiork@cpan.org

SEE ALSO

Catalyst, Catalyst::Model, HTML::Formhandler, Module::Pluggable

COPYRIGHT & LICENSE

Copyright 2015, John Napiorkowski email:jjnapiork@cpan.org

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