Misc updates to adjust Parts 8 & 9 and update their final tarball code
[catagits/Catalyst-Manual.git] / lib / Catalyst / Manual / Tutorial / AdvancedCRUD / FormFu.pod
index 367b850..81f59be 100644 (file)
@@ -1,9 +1,9 @@
 =head1 NAME
 
-Catalyst::Manual::Tutorial::AdvancedCRUD::FormFu - Catalyst Tutorial - Part 9: Advanced CRUD - FormFu
 
 
-NOTE:  This part of the tutorial is in progress and will be ready soon.
+Catalyst::Manual::Tutorial::AdvancedCRUD::FormFu - Catalyst Tutorial - Part 9: Advanced CRUD - FormFu
+
 
 =head1 OVERVIEW
 
@@ -60,7 +60,8 @@ L<Appendices|Catalyst::Manual::Tutorial::Appendices>
 
 This portion of the tutorial explores L<HTML::FormFu|HTML::FormFu> 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.
+as well as save and restore data to/from the database.  This was written
+using HTML::FormFu version 0.03006.
 
 See 
 L<Catalyst::Manual::Tutorial::AdvancedCRUD|Catalyst::Manual::Tutorial::AdvancedCRUD>
@@ -79,13 +80,33 @@ required by C<HTML::FormFu>:
     sudo apt-get install libtest-nowarnings-perl libdatetime-format-builder-perl \
     libdatetime-format-strptime-perl libdatetime-locale-perl \
     libhtml-tokeparser-simple-perl liblist-moreutils-perl \
-    libregexp-copy-perl libregexp-common-perl libyaml-syck-perl libparams-util-perl
+    libregexp-copy-perl libregexp-common-perl libyaml-syck-perl libparams-util-perl \
+    libcrypt-des-perl libcaptcha-recaptcha-perl libcrypt-cbc-perl \
+    libreadonly-xs-perl libmoose-perl libregexp-assemble-perl
+    
+    ...
+    
+    sudo apt-get clean
 
 Then use the following command to install directly from CPAN the modules 
 that aren't available as Ubuntu/Debian packages via C<apt-get>:
 
-    sudo cpan File::ShareDir Task::Weaken Config::Any HTML::FormFu \
-    Catalyst::Controller::HTML::FormFu
+    sudo cpan File::ShareDir Task::Weaken Config::Any Test::Harness Test::Aggregate \
+    boolean Test::MockTime DateTime::Format::Natural HTML::FormFu \
+    Catalyst::Component::InstancePerContext Catalyst::Controller::HTML::FormFu \
+    HTML::FormFu::Model::DBIC
+    
+    ...
+    
+    Is it OK to try to connect to the Internet? [yes] yes
+    
+    ...
+    
+
+B<Note:> If you are following along with the Ubuntu LiveCD, you might 
+want to make sure you still have adequate free disk space in the root 
+partition with the C<df> command.  You can free up some space with 
+C<rm -rf /root/.cpan/*>.
 
 
 =head1 C<HTML::FormFu> FORM CREATION
@@ -100,11 +121,11 @@ First, change your C<lib/MyApp/Controller/Books.pm> to inherit from
 L<Catalyst::Controller::HTML::FormFu|Catalyst::Controller::HTML::FormFu>
 by changing the C<use base> line from the default of:
 
-    use base 'Catalyst::Controller';
+    use parent 'Catalyst::Controller';
 
 to use the FormFu base controller class:
 
-    use base 'Catalyst::Controller::HTML::FormFu';
+    use parent 'Catalyst::Controller::HTML::FormFu';
 
 
 =head2 Add Action to Display and Save the Form
@@ -209,7 +230,7 @@ this document for a more foolproof config format.
 
 =head2 Update the CSS
 
-Edit C<root/src/ttsite.css> and add the following lines to the bottom of
+Edit C<root/static/css/main.css> and add the following lines to the bottom of
 the file:
 
     input {
@@ -315,16 +336,8 @@ to match:
           # This is an optional 'mouse over' title pop-up
           attributes:
             title: Enter a book title here
-          # Use Filter to clean up the input data
-          filter:
-            # Remove whitespace at both ends
-            - TrimEdges
-            # Escape HTML characters for safety
-            - HTMLEscape
           # Add constraints for the field
           constraints:
-            # The user cannot leave this field blank
-            - SingleValue
             # Force the length to be between 5 and 40 chars
             - type: Length
               min: 5
@@ -339,16 +352,22 @@ to match:
           attributes:
             title: Enter a rating between 1 and 5 here
           # Use Filter to clean up the input data
-          filter:
-            # Remove whitespace at both ends
-            - TrimEdges
+          # Could use 'NonNumeric' below, but since Filters apply *before*
+          # constraints, it would conflict with the 'Integer' constraint below.
+          # So let's skip this and just use the constraint.
+          #filter:
             # Remove everything except digits
-            - NonNumeric
+            #- NonNumeric
           # Add constraints to the field
           constraints:
-            - SingleValue
             # Make sure it's a number
-            - Integer
+            - type: Integer
+              message: "Required. Digits only, please."
+            # Check the min & max values
+            - type: Range
+              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
@@ -366,12 +385,6 @@ to match:
           # One could argue we don't need to do filters or constraints for
           # a select list, but it's smart to do validation and sanity
           # checks on this data in case a user "hacks" the input
-          # Use Filter to clean up the input data
-          filter:
-            # Remove whitespace at both ends
-            - TrimEdges
-            # Escape HTML characters for safety
-            - HTMLEscape
           # Add constraints to the field
           constraints:
             # Make sure it's a number
@@ -382,10 +395,17 @@ to match:
           name: submit
           value: Submit
     
-    # Globally ensure that each field only specified one value
+    # Global filters and constraints.
     constraints:
-        # The user cannot leave any fields blank
-        - Required
+      # 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
 
 B<NOTE:> Copying and pasting YAML from perl documentation is sometimes
 tricky.  See the L<Config::General Config for this tutorial> section of
@@ -530,12 +550,18 @@ existing "Delete" link that allows us to edit/update each existing book.
 The last E<lt>tdE<gt> cell in the book list table should look like the 
 following:
 
+    ...
     <td>
       [% # Add a link to delete a book %]
       <a href="[% c.uri_for('delete', book.id) %]">Delete</a>
       [% # Add a link to edit a book %]
       <a href="[% c.uri_for('formfu_edit', book.id) %]">Edit</a>
     </td>
+    ...
+
+B<Note:> Only add two lines (the "Add a link to edit a book" comment
+and the href for C<formfu_edit>).  Make sure you add it below the
+existing C<delete> link.
 
 
 =head2 Try Out the Edit/Update Feature
@@ -564,7 +590,6 @@ Apache config files.
 
    constraints   Required
    <elements>
-       constraints   SingleValue
        <constraints>
            min   5
            max   40
@@ -581,7 +606,6 @@ Apache config files.
        </attributes>
    </elements>
    <elements>
-       constraints   SingleValue
        constraints   Integer
        filter   TrimEdges
        filter   NonNumeric
@@ -617,7 +641,7 @@ Kennedy Clark, C<hkclark@gmail.com>
 
 Please report any errors, issues or suggestions to the author.  The
 most recent version of the Catalyst Tutorial can be found at
-L<http://dev.catalyst.perl.org/repos/Catalyst/trunk/Catalyst-Manual/lib/Catalyst/Manual/Tutorial/>.
+L<http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-Manual/5.70/trunk/lib/Catalyst/Manual/Tutorial/>.
 
 Copyright 20066-2008, Kennedy Clark, under Creative Commons License
 (L<http://creativecommons.org/licenses/by-nc-sa/2.5/>).