L<HTML::FormFu|HTML::FormFu>.
-=head1 Install C<HTML::FormFu>
+=head1 Install HTML::FormFu
If you are following along in Debian 5, it turns out that some of the
modules we need are not yet available as Debian packages at the time
sudo cpan Catalyst::Component::InstancePerContext Catalyst::Controller::HTML::FormFu
-=head1 C<HTML::FormFu> FORM CREATION
+=head1 HTML::FormFu FORM CREATION
This section looks at how L<HTML::FormFu|HTML::FormFu> can be used to
add additional functionality to the manually created form from Chapter 4.
-=head2 Inherit From C<Catalyst::Controller::HTML::FormFu>
+=head2 Inherit From Catalyst::Controller::HTML::FormFu
First, change your C<lib/MyApp/Controller/Books.pm> to inherit from
L<Catalyst::Controller::HTML::FormFu|Catalyst::Controller::HTML::FormFu>
# is shorthand for "$form->submitted && !$form->has_errors"
if ($form->submitted_and_valid) {
# Create a new book
- my $book = $c->model('DB::Books')->new_result({});
+ my $book = $c->model('DB::Book')->new_result({});
# Save the form data for the book
$form->model->update($book);
# Set a status message for the user
$c->detach;
} else {
# Get the authors from the DB
- my @author_objs = $c->model("DB::Authors")->all();
+ my @author_objs = $c->model("DB::Author")->all();
# Create an array of arrayrefs where each arrayref is an author
my @authors;
foreach (sort {$a->last_name cmp $b->last_name} @author_objs) {
use to easily launch our HTML::FormFu-based form.
-=head2 Test The <HTML::FormFu> Create Form
+=head2 Test The HTML::FormFu Create Form
Press C<Ctrl-C> to kill the previous server instance (if it's still
running) and restart it:
Login as C<test01> (password: mypass). Once at the Book List page,
click the new HTML::FormFu "Create" link at the bottom to display the
-form. Fill in the following values: Title = "Internetworking with
-TCP/IP Vol. II", Rating = "4", and Author = "Comer". Click Submit,
-and you will be returned to the Book List page with a "Book created"
-status message displayed.
+form. Fill in the following values:
-Also note that this implementation allows you to can create books with
+ Title = "Internetworking with TCP/IP Vol. II"
+ Rating = "4"
+ Author = "Comer"
+
+Click the Submit button, and you will be returned to the Book List page
+with a "Book created" status message displayed.
+
+Also note that this implementation allows you to create books with any
bogus information. Although we have constrained the authors with the
drop-down list (note that this isn't bulletproof because we still have
not prevented a user from "hacking" the form to specify other values),
there are no restrictions on items such as the length of the title (for
-example, you can create a one-letter title) and value for the rating
+example, you can create a one-letter title) and the value of the rating
(you can use any number you want, and even non-numeric values with
SQLite). The next section will address this concern.
performing any validation.
-=head1 C<HTML::FormFu> VALIDATION AND FILTERING
+=head1 HTML::FormFu VALIDATION AND FILTERING
Although the use of L<HTML::FormFu|HTML::FormFu> in the previous section
did provide an automated mechanism to build the form, the real power of
:FormConfig('books/formfu_create.yml') {
my ($self, $c) = @_;
- # Get the specified book already saved by the 'base' method
+ # Get the specified book already saved by the 'object' method
my $book = $c->stash->{object};
# Make sure we were able to get a book
$c->detach;
} else {
# Get the authors from the DB
- my @author_objs = $c->model("DB::Authors")->all();
+ my @author_objs = $c->model("DB::Author")->all();
# Create an array of arrayrefs where each arrayref is an author
my @authors;
foreach (sort {$a->last_name cmp $b->last_name} @author_objs) {
be returned to the book list with a "Book edited" message at the top in
green. Experiment with other edits to various books.
+
=head2 More Things to Try
You are now armed with enough knowledge to be dangerous. You can keep
Or you can proceed to write your own application, which is probably the
real reason you worked through this Tutorial in the first place.
+
=head2 Config::General Config for this tutorial
If you are having difficulty with YAML config above, please save the
indicator submit
-
=head1 AUTHOR
Kennedy Clark, C<hkclark@gmail.com>