X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Manual.git;a=blobdiff_plain;f=lib%2FCatalyst%2FManual%2FTutorial%2F09_AdvancedCRUD%2F09_FormFu.pod;h=adc0b23db66aed63767e7fa99203f6a1818eb100;hp=e3b5a0dc3eda053f37a7b3ff7dff08a8fefff5e3;hb=56a12748311fdb2580d7ad7cd84c255cd4447d8b;hpb=16d0d3969b36142004136ddb3e50b8cf499ab7e2
diff --git a/lib/Catalyst/Manual/Tutorial/09_AdvancedCRUD/09_FormFu.pod b/lib/Catalyst/Manual/Tutorial/09_AdvancedCRUD/09_FormFu.pod
index e3b5a0d..adc0b23 100644
--- a/lib/Catalyst/Manual/Tutorial/09_AdvancedCRUD/09_FormFu.pod
+++ b/lib/Catalyst/Manual/Tutorial/09_AdvancedCRUD/09_FormFu.pod
@@ -58,22 +58,27 @@ L
This portion of the tutorial explores L 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::FormFu version 0.05001.
+and restore data to/from the database.
See L for additional form
management options other than L.
+Source code for the tutorial in included in the F
+directory of the Tutorial Virtual machine (one subdirectory per
+chapter). There are also instructions for downloading the code in
+L.
+
=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.
+functionality to the manually created form from
+L.
=head2 Inherit From Catalyst::Controller::HTML::FormFu
-First, change your C to inherit from
+First, change your F to inherit from
L by changing the C line
from the default of:
@@ -85,27 +90,30 @@ to use the FormFu base controller class:
Don't forget to add:
+ requires 'HTML::FormFu';
requires 'Catalyst::Controller::HTML::FormFu';
+ requires 'HTML::FormFu::Model::DBIC';
to your C.
+
=head2 Add Action to Display and Save the Form
-Open C in your editor and add the
+Open F in your editor and add the
following method:
=head2 formfu_create
-
+
Use HTML::FormFu to create a new book
-
+
=cut
-
+
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
my $form = $c->stash->{form};
-
+
# Check if the form has been submitted (vs. displaying the initial
# form) and if the data passed validation. "submitted_and_valid"
# is shorthand for "$form->submitted && !$form->has_errors"
@@ -114,10 +122,9 @@ following method:
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->flash->{status_msg} = 'Book created';
- # Return to the books list
- $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")}));
$c->detach;
} else {
# Get the authors from the DB
@@ -132,7 +139,7 @@ following method:
# Add the authors to it
$select->options(\@authors);
}
-
+
# Set the template
$c->stash(template => 'books/formfu_create.tt2');
}
@@ -140,13 +147,13 @@ following method:
=head2 Create a Form Config File
-Although C supports any configuration file handled by
+Although L supports any configuration file handled by
L, most people tend to use YAML. First create a directory
to hold your form configuration files:
- mkdir -p root/forms/books
+ $ mkdir -p root/forms/books
-Then create the file C and enter the
+Then create the file F and enter the
following text:
---
@@ -161,14 +168,14 @@ following text:
# This is an optional 'mouse over' title pop-up
attributes:
title: Enter a book title here
-
+
# Another text field for the numeric rating
- type: Text
name: rating
label: Rating
attributes:
title: Enter a rating between 1 and 5 here
-
+
# Add a drop-down list for the author selection. Note that we will
# dynamically fill in all the authors from the controller but we
# could manually set items in the drop-list by adding this YAML code:
@@ -178,20 +185,20 @@ following text:
- type: Select
name: authors
label: Author
-
+
# The submit button
- type: Submit
name: submit
value: Submit
B Copying and pasting YAML from Perl documentation is sometimes
-tricky. See the L section of
+tricky. See the L section of
this document for a more foolproof config format.
=head2 Update the CSS
-Edit C and add the following lines to the
+Edit F and add the following lines to the
bottom of the file:
...
@@ -211,21 +218,21 @@ These changes will display form elements vertically.
=head2 Create a Template Page To Display The Form
-Open C in your editor and enter the
+Open F in your editor and enter the
following:
[% META title = 'Create/Update Book' %]
-
+
[%# Render the HTML::FormFu Form %]
[% form %]
-
-
=head2 Add Links for Create and Update via C
-Open C in your editor and add the following to
+Open F in your editor and add the following to
the bottom of the existing file:
...
@@ -235,7 +242,7 @@ the bottom of the existing file:
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.
+to easily launch our L-based form.
=head2 Test The HTML::FormFu Create Form
@@ -245,14 +252,14 @@ Make sure the server is running with the "-r" restart option:
$ script/myapp_server.pl -r
Login as C (password: mypass). Once at the Book List page,
-click the new HTML::FormFu "Create" link at the bottom to display the
+click the new L "Create" link at the bottom to display the
form. Fill in the following values:
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
+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
@@ -284,7 +291,7 @@ whitespace from fields or to escape meta-characters in user input.
=head2 Add Constraints
-Open C in your editor and update it
+Open F in your editor and update it
to match:
---
@@ -307,7 +314,7 @@ to match:
max: 40
# Override the default of 'Invalid input'
message: Length must be between 5 and 40 characters
-
+
# Another text field for the numeric rating
- type: Text
name: rating
@@ -331,7 +338,7 @@ to match:
min: 1
max: 5
message: "Must be between 1 and 5."
-
+
# Add a select list for the author selection. Note that we will
# dynamically fill in all the authors from the controller but we
# could manually set items in the select by adding this YAML code:
@@ -352,26 +359,26 @@ to match:
constraints:
# Make sure it's a number
- Integer
-
+
# The submit button
- type: Submit
name: submit
value: Submit
-
+
# Global filters and constraints.
constraints:
- # The user cannot leave any fields blank
- - Required
- # If not all fields are required, move the Required constraint to the
- # fields that are
+ # The user cannot leave any fields blank
+ - Required
+ # If not all fields are required, move the Required constraint to the
+ # fields that are
filter:
- # Remove whitespace at both ends
- - TrimEdges
- # Escape HTML characters for safety
- - HTMLEscape
+ # Remove whitespace at both ends
+ - TrimEdges
+ # Escape HTML characters for safety
+ - HTMLEscape
B Copying and pasting YAML from Perl documentation is sometimes
-tricky. See the L section of
+tricky. See the L section of
this document for a more foolproof config format.
The main changes are:
@@ -382,7 +389,7 @@ The main changes are:
The C