# NAME Catalyst::Model::Data::MuForm - Proxy a directory of Data::MuFormr forms # SYNOPSIS package MyApp::Model::Form; use Moo; # Or Moose, etc. extends 'Catalyst::Model::Data::MuForm'; __PACKAGE__->config( form_namespace=>'MyApp::Form' ); # This is the default BTW 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->validated) { ... } else { ... } # DESCRIPTION Assuming a project namespace 'MyApp::Form' with [HTML::Formhandler](https://metacpan.org/pod/HTML::Formhandler) forms. like the following example: package MyApp::Form::Email; use HTML::FormHandler::Moose; extends 'HTML::FormHandler'; has 'invalid_domains' => (is=>'ro', required=>1); has_field 'email' => ( type=>'Email', size => 96, required => 1); You create a single [Catalyst](https://metacpan.org/pod/Catalyst) model like this: package MyApp::Model::Form; use Moo; # Or Moose, etc. extends 'Catalyst::Model::Data::MuForm'; __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'. You can set model configuration in the normal way, in your application general configuration: package MyApp; use Catalyst; MyApp->config( 'Model::Form::Email' => { invalid_domains => [qw(foo.com wack.org)], }, ); MyApp->setup; And you can pass additional args to the 'process' call of the form when you request the form model: my $email_form = $c->model('Form::Email', model => $user_model, params => $c->req->body_parameters); Basically you can pass anything you'd pass to 'process' in [Data::MuForm](https://metacpan.org/pod/Data::MuForm). 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. 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. So you don't need to set the 'params' if the parameters are just the existing [Catalyst](https://metacpan.org/pod/Catalyst) body\_parameters. 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](https://metacpan.org/pod/Catalyst) configuration. ## form\_namespace This is the target namespace that [Module::Pluggable](https://metacpan.org/pod/Module::Pluggable) uses to look for forms. It defaults to 'MyApp::Form' (where 'MyApp' is you application namespace). ## body\_method This is the name of the method called on [Catalyst::Request](https://metacpan.org/pod/Catalyst::Request) used to access any POSTed data. Required field, the options are 'body\_data' and 'body\_parameters. The default is 'body\_data'. ## no\_auto\_process By default when createing the perrequest form if the request is a POST we just go ahead and process those args. Setting this to true will disable this behavior globally if you prefer more control. # 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](email:jjnapiork@cpan.org) # SEE ALSO [Catalyst](https://metacpan.org/pod/Catalyst), [Catalyst::Model](https://metacpan.org/pod/Catalyst::Model), [Data::MuForm](https://metacpan.org/pod/Data::MuForm) # COPYRIGHT & LICENSE Copyright 2017, John Napiorkowski [email:jjnapiork@cpan.org](email:jjnapiork@cpan.org) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.