=head1 DESCRIPTION
-This portion of the tutorial explores L<HTML::FormHandler|HTML::FormHandler> and
-how it can be used to manage forms, perform validation of form input,
-as well as save and restore data to/from the database. This was written
-using HTML::FormHandler version 0.28001.
+This portion of the tutorial explores
+L<HTML::FormHandler> and how it can be used to manage
+forms, perform validation of form input, and save and restore data
+to or from the database. This was written using HTML::FormHandler version
+0.28001.
See
-L<Catalyst::Manual::Tutorial::09_AdvancedCRUD|Catalyst::Manual::Tutorial::09_AdvancedCRUD>
+L<Catalyst::Manual::Tutorial::09_AdvancedCRUD>
for additional form management options other than
-L<HTML::FormHandler|HTML::FormHandler>.
+L<HTML::FormHandler>.
=head1 Install HTML::FormHandler
sudo cpan HTML::FormHandler::Model::DBIC
-It will install L<HTML::FormHandler> as a prereq.
+It will install L<HTML::FormHandler> as a prerequisite.
+Also, add:
+
+ requires 'HTML::FormHandler::Model::DBIC';
+
+to your C<Makefile.PL>.
=head1 HTML::FormHandler FORM CREATION
-This section looks at how L<HTML::FormHandler|HTML::FormHandler> can be used to
+This section looks at how L<HTML::FormHandler> can be used to
add additional functionality to the manually created form from Chapter 4.
=head2 Using FormHandler in your controllers
-FormHandler doen't have a Catalyst base controller, because interfacing
+FormHandler doesn't have a Catalyst base controller, because interfacing
to a form is only a couple of lines of code.
=head2 Create a Book Form
Create the directory C<lib/MyApp/Form>. Create C<lib/MyApp/Form/Book.pm>:
package MyApp::Form::Book;
+
use HTML::FormHandler::Moose;
extends 'HTML::FormHandler::Model::DBIC';
use namespace::autoclean;
$c->stash( template => 'books/form.tt2', form => $form );
$form->process( item => $book, params => $c->req->params );
return unless $form->validated;
- $c->flash( message => 'Book created' );
- # Redirect the user back to the list page
- $c->response->redirect($c->uri_for($self->action_for('list')));
+ # Set a status message for the user & return to books list
+ $c->response->redirect($c->uri_for($self->action_for('list'),
+ {mid => $c->set_status_msg("Book created")}));
}
These two methods could be combined at this point, but we'll use the 'form'
has_field 'rating' => ( type => 'Integer', range_start => 1, range_end => 5 );
The 'authors' relationship is a 'many-to-many' pseudo-relation, so this field
-can be set to Multiple to allow the selection of multiple authors and make it
+can be set to Multiple to allow the selection of multiple authors; also, make it
required:
- has_field 'authors' => ( type => 'Multiple', required => 1 );
+ has_field 'authors' => ( type => 'Multiple', label_column => 'last_name',
+ required => 1 );
-Note: FormHandler automatically strips whitespace at the beginning or end of fields.
-If you want some other kind of stripping (or none) you can specify it explicitly.
-(see L<HTML::FormHandler::Manual>)
+Note: FormHandler automatically strips whitespace at the beginning and
+end of fields. If you want some other kind of stripping (or none) you
+can specify it explicitly; see L<HTML::FormHandler::Manual>.
=head2 Try Out the Updated Form