Git Product home page Git Product logo

catalyst-model-htmlformhandler's Introduction

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:[email protected]

SEE ALSO

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

COPYRIGHT & LICENSE

Copyright 2015, John Napiorkowski email:[email protected]

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

catalyst-model-htmlformhandler's People

Contributors

jjn1056 avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.