X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FManual%2FTutorial%2FAdvancedCRUD%2FFormFu.pod;h=cbcf2593165012b368ad46bbadbf8a2e868f96e9;hb=a46b474eb241c3eac09ac0cd8af400a864de3ee5;hp=f261950cab69f19309e52c0a1bb1ee2006c35a11;hpb=4b4d38842b2383a70a54bcadb493505950b469dd;p=catagits%2FCatalyst-Manual.git diff --git a/lib/Catalyst/Manual/Tutorial/AdvancedCRUD/FormFu.pod b/lib/Catalyst/Manual/Tutorial/AdvancedCRUD/FormFu.pod index f261950..cbcf259 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 @@ -121,7 +121,7 @@ following method: =cut - sub formfu_create :Chained('base) :PathPart('formfu_create') :Args(0) :FormConfig { + sub formfu_create :Chained('base') :PathPart('formfu_create') :Args(0) :FormConfig { my ($self, $c) = @_; # Get the form that the :FormConfig attribute saved in the stash @@ -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: @@ -291,7 +291,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 @@ -450,10 +450,10 @@ bottom: sub formfu_edit :Chained('object') :PathPart('formfu_edit') :Args(0) :FormConfig('books/formfu_create.yml') { - my ($self, $c, $id) = @_; + my ($self, $c) = @_; - # Get the specified book - my $book = $c->model('DB::Books')->find($id); + # Get the specified book already saved by the 'object' method + my $book = $c->stash->{object}; # Make sure we were able to get a book unless ($book) { @@ -481,7 +481,7 @@ bottom: my @author_objs = $c->model("DB::Authors")->all(); # Create an array of arrayrefs where each arrayref is an author my @authors; - foreach (sort {$a->last_name cmp $b->last_name} @author_bjs) { + foreach (sort {$a->last_name cmp $b->last_name} @author_objs) { push(@authors, [$_->id, $_->last_name]); } # Get the select added by the config file @@ -504,19 +504,27 @@ the common code in separate methods). The main differences are: =item * -We accept C<$id> as an argument via the URL. +We have to manually specify the name of the FormFu .yml file as an +argument to C<:FormConfig> because the name can no longer be +automatically deduced from the name of our action/method (by default, +FormFu would look for a file named C). =item * -We use C<$id> to look up the existing book from the database. +We load the book object from the stash (found using the $id passed to +the Chained object method) =item * -We make sure the C<$id> and book lookup returned a valid book. If not, -we set the error message and return to the book list. +We use C<$id> to look up the existing book from the database. =item * +We make sure the book lookup returned a valid book. If not, we set +the error message and return to the book list. + +=item * + If the form has been submitted and passes validation, we skip creating a new book and just use C<$form-Emodel-Eupdate> to update the existing book. @@ -564,6 +572,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 @@ -595,6 +604,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 @@ -649,7 +659,6 @@ Apache config files. indicator submit - =head1 AUTHOR Kennedy Clark, C