X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Manual.git;a=blobdiff_plain;f=lib%2FCatalyst%2FManual%2FTutorial%2FAdvancedCRUD%2FFormFu.pod;h=1c7176d1b0c8236933c715f9e38ad374ac7213f2;hp=6f8e31a56bf9e06bc8258b4558beac3fad3ef688;hb=3b1fa91be1d89d2297aa9e8e83462344d9cd9820;hpb=ccc9b2bc4d91c14340ba6547d79fb0e70ee7d0f6 diff --git a/lib/Catalyst/Manual/Tutorial/AdvancedCRUD/FormFu.pod b/lib/Catalyst/Manual/Tutorial/AdvancedCRUD/FormFu.pod index 6f8e31a..1c7176d 100644 --- a/lib/Catalyst/Manual/Tutorial/AdvancedCRUD/FormFu.pod +++ b/lib/Catalyst/Manual/Tutorial/AdvancedCRUD/FormFu.pod @@ -67,7 +67,7 @@ for additional form management options other than L. -=head1 Install C +=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 @@ -91,13 +91,13 @@ that aren't available as Debian packages: sudo cpan Catalyst::Component::InstancePerContext Catalyst::Controller::HTML::FormFu -=head1 C FORM CREATION +=head1 HTML::FormFu FORM CREATION This section looks at how L can be used to add additional functionality to the manually created form from Chapter 4. -=head2 Inherit From C +=head2 Inherit From Catalyst::Controller::HTML::FormFu First, change your C to inherit from L @@ -132,7 +132,7 @@ following method: # 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 @@ -142,7 +142,7 @@ following method: $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) { @@ -261,7 +261,7 @@ This adds a new link to the bottom of the book list page that we can use to easily launch our HTML::FormFu-based form. -=head2 Test The Create Form +=head2 Test The HTML::FormFu Create Form Press C to kill the previous server instance (if it's still running) and restart it: @@ -270,17 +270,21 @@ running) and restart it: Login as C (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. @@ -291,7 +295,7 @@ the previous paragraph is that the I itself is not performing any validation. -=head1 C VALIDATION AND FILTERING +=head1 HTML::FormFu VALIDATION AND FILTERING Although the use of L in the previous section did provide an automated mechanism to build the form, the real power of @@ -452,7 +456,7 @@ bottom: :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 @@ -478,7 +482,7 @@ bottom: $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) { @@ -572,6 +576,7 @@ Stevens as a co-author (control-click), and click Submit. You will then 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 @@ -603,6 +608,7 @@ Support the CRUD cycle for authors. 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 @@ -657,7 +663,6 @@ Apache config files. indicator submit - =head1 AUTHOR Kennedy Clark, C