Remove TTSite in favor of manually created wrapper template and css
[catagits/Catalyst-Manual.git] / lib / Catalyst / Manual / Tutorial / AdvancedCRUD / FormFu.pod
index 644f107..4e6dba6 100644 (file)
@@ -1,5 +1,7 @@
 =head1 NAME
 
+
+
 Catalyst::Manual::Tutorial::AdvancedCRUD::FormFu - Catalyst Tutorial - Part 9: Advanced CRUD - FormFu
 
 
@@ -124,8 +126,8 @@ following method:
         # Get the form that the :FormConfig attribute saved in the stash
         my $form = $c->stash->{form};
   
-        # Check if the form as been submitted (vs. displaying the initial
-        # form) and if the data based validation.  "submitted_and_valid"
+        # 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"
         if ($form->submitted_and_valid) {
             # Create a new book
@@ -202,6 +204,10 @@ following text:
           name: submit
           value: Submit
 
+B<NOTE:> Copying and pasting YAML from perl documentation is sometimes
+tricky.  See the L<Config::General Config for this tutorial> section of
+this document for a more foolproof config format.
+
 
 =head2 Update the CSS
 
@@ -235,7 +241,7 @@ Open C<root/src/books/formfu_create.tt2> in your editor and enter the following:
     [%# Render the HTML::FormFu Form %]
     [% form %]
     
-    <p><a href="[% Catalyst.uri_for('list') %]">Return to book list</a></p>
+    <p><a href="[% c.uri_for('list') %]">Return to book list</a></p>
 
 
 =head2 Add Links for Create and Update via C<HTML::FormFu>
@@ -245,7 +251,7 @@ the bottom of the existing file:
 
     <p>
       HTML::FormFu:
-      <a href="[% Catalyst.uri_for('formfu_create') %]">Create</a>
+      <a href="[% c.uri_for('formfu_create') %]">Create</a>
     </p>
 
 This adds a new link to the bottom of the book list page that we can
@@ -311,23 +317,15 @@ 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
               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
@@ -336,15 +334,17 @@ to match:
             title: Enter a rating between 1 and 5 here
           # Use Filter to clean up the input data
           filter:
-            # Remove whitespace at both ends
-            - TrimEdges
             # Remove everything except digits
             - NonNumeric
           # Add constraints to the field
           constraints:
-            - SingleValue
+            - Required
             # Make sure it's a number
             - Integer
+            message: "Digits only, please."
+            # Filters apply before constraints.
+            # If a user gives the rating "excellent", the NonNumeric filter would remove the entire string as it contains no digits. 
+            # Remove the NonNumeric filter and let the Integer constraint handle the validation and error message.
     
         # Add a select list for the author selection.  Note that we will
         # dynamically fill in all the authors from the controller but we
@@ -362,12 +362,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
@@ -378,10 +372,20 @@ 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
+this document for a more foolproof config format.
 
 The main changes are:
 
@@ -452,8 +456,8 @@ bottom:
         # Get the form that the :FormConfig attribute saved in the stash
         my $form = $c->stash->{form};
     
-        # Check if the form as been submitted (vs. displaying the initial
-        # form) and if the data based validation.  "submitted_and_valid"
+        # 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"
         if ($form->submitted_and_valid) {
             # Save the form data for the book
@@ -524,9 +528,9 @@ following:
 
     <td>
       [% # Add a link to delete a book %]
-      <a href="[% Catalyst.uri_for('delete', book.id) %]">Delete</a>
+      <a href="[% c.uri_for('delete', book.id) %]">Delete</a>
       [% # Add a link to edit a book %]
-      <a href="[% Catalyst.uri_for('formfu_edit', book.id) %]">Edit</a>
+      <a href="[% c.uri_for('formfu_edit', book.id) %]">Edit</a>
     </td>
 
 
@@ -546,6 +550,61 @@ be returned to the book list with a "Book edited" message at the top in
 green.  Experiment with other edits to various books.
 
 
+=head2  Config::General Config for this tutorial
+
+If you are having difficulty with YAML config above, please save the
+below into the file C<formfu_create.conf> and delete the
+C<formfu_create.yml> file.  The below is in
+L<Config::General|Config::General> format which follows the syntax of
+Apache config files.
+
+   constraints   Required
+   <elements>
+       <constraints>
+           min   5
+           max   40
+           type   Length
+           message   Length must be between 5 and 40 characters
+       </constraints>
+       filter   TrimEdges
+       filter   HTMLEscape
+       name   title
+       type   Text
+       label   Title
+       <attributes>
+           title   Enter a book title here
+       </attributes>
+   </elements>
+   <elements>
+       constraints   Integer
+       filter   TrimEdges
+       filter   NonNumeric
+       name   rating
+       type   Text
+       label   Rating
+       <attributes>
+           title   Enter a rating between 1 and 5 here
+       </attributes>
+   </elements>
+   <elements>
+       constraints   Integer
+       filter   TrimEdges
+       filter   HTMLEscape
+       name   authors
+       type   Select
+       label   Author
+       multiple   1
+       size   3
+   </elements>
+   <elements>
+       value   Submit
+       name   submit
+       type   Submit
+   </elements>
+   indicator   submit
+   
+
+
 =head1 AUTHOR
 
 Kennedy Clark, C<hkclark@gmail.com>