A few minor clarifications/adjustments
[catagits/Catalyst-Manual.git] / lib / Catalyst / Manual / Tutorial / 04_BasicCRUD.pod
index 8506531..490eb74 100644 (file)
@@ -116,11 +116,9 @@ Edit C<lib/MyApp/Controller/Books.pm> and enter the following method:
         # Note: Above is a shortcut for this:
         # $book->create_related('book_authors', {author_id => $author_id});
     
-        # Assign the Book object to the stash for display in the view
-        $c->stash->{book} = $book;
-    
-        # Set the TT template to use
-        $c->stash->{template} = 'books/create_done.tt2';
+        # Assign the Book object to the stash for display and set template
+        $c->stash(book     => $book,
+                  template => 'books/create_done.tt2');
     }
 
 Notice that Catalyst takes "extra slash-separated information" from the
@@ -359,9 +357,8 @@ to the following:
     | /books/url_create                   | /books/url_create                    |
     '-------------------------------------+--------------------------------------'
 
-Now start the development server with our basic chained method in
-place and the startup debug output should change to something along
-the lines of the following:
+When the development server restarts, the debug output should change 
+to something along the lines of the following:
 
     [debug] Loaded Path actions:
     .-------------------------------------+--------------------------------------.
@@ -413,7 +410,7 @@ method:
         my ($self, $c) = @_;
     
         # Store the ResultSet in stash so it's available for other methods
-        $c->stash->{resultset} = $c->model('DB::Book');
+        $c->stash(resultset => $c->model('DB::Book'));
     
         # Print a message to the debug log
         $c->log->debug('*** INSIDE BASE METHOD ***');
@@ -495,7 +492,7 @@ Edit C<lib/MyApp/Controller/Books.pm> and add the following method:
         my ($self, $c) = @_;
     
         # Set the TT template to use
-        $c->stash->{template} = 'books/form_create.tt2';
+        $c->stash(template => 'books/form_create.tt2');
     }
 
 This action simply invokes a view containing a form to create a book.
@@ -549,15 +546,13 @@ save the form information to the database:
         # Note: Above is a shortcut for this:
         # $book->create_related('book_authors', {author_id => $author_id});
     
-        # Store new model object in stash
-        $c->stash->{book} = $book;
-    
         # Avoid Data::Dumper issue mentioned earlier
         # You can probably omit this
         $Data::Dumper::Useperl = 1;
     
-        # Set the TT template to use
-        $c->stash->{template} = 'books/create_done.tt2';
+        # Store new model object in stash and set template
+        $c->stash(book     => $book,
+                  template => 'books/create_done.tt2');
     }
 
 
@@ -909,7 +904,10 @@ C<E<lt>span class="message"E<gt>> line.
 Point your browser to L<http://localhost:3000/books/list> (you should 
 now be able to safely hit "refresh" in your browser). Then delete the 
 remaining copy of "TCPIP_Illustrated_Vol-2". The green "Book deleted" 
-status message should return. 
+status message should return.  But notice that you can now hit the
+"Reload" button in your browser and it just redisplays the book
+list (and it correctly shows it without the "Book deleted" message
+on redisplay).
 
 B<NOTE:> Another popular method for maintaining server-side
 information across a redirect is to use the C<flash> technique we
@@ -1020,6 +1018,7 @@ time entered for it (see the last line in the listing below):
     5|Designing with Web Standards|5|2010-02-16 04:15:45|2010-02-16 04:15:45
     9|TCP/IP Illustrated, Vol 3|5|2010-02-16 04:15:45|2010-02-16 04:15:45
     10|TCPIP_Illustrated_Vol-2|5|2010-02-16 04:18:42|2010-02-16 04:18:42
+    sqlite> .q
 
 Notice in the debug log that the SQL DBIC generated has changed to
 incorporate the datetime logic:
@@ -1086,13 +1085,13 @@ Then add the following method to the C<lib/MyApp/Controller/Books.pm>:
         # Retrieve all of the book records as book model objects and store in the
         # stash where they can be accessed by the TT template, but only
         # retrieve books created within the last $min number of minutes
-        $c->stash->{books} = [$c->model('DB::Book')
-                                ->created_after(DateTime->now->subtract(minutes => $mins))];
+        $c->stash(books => [$c->model('DB::Book')
+                                ->created_after(DateTime->now->subtract(minutes => $mins))]);
     
         # Set the TT template to use.  You will almost always want to do this
         # in your action methods (action methods respond to user input in
         # your controllers).
-        $c->stash->{template} = 'books/list.tt2';
+        $c->stash(template => 'books/list.tt2');
     }
 
 Now try different values for the "minutes" argument (the final number 
@@ -1103,7 +1102,7 @@ fifteen minutes:
     http://localhost:3000/books/list_recent/15
 
 Depending on how recently you added books, you might want to
-try a higher or lower value.
+try a higher or lower value for the minutes.
 
 
 =head2 Chaining ResultSets
@@ -1136,15 +1135,15 @@ C<lib/MyApp/Controller/Books.pm> and add the following method:
         # stash where they can be accessed by the TT template, but only
         # retrieve books created within the last $min number of minutes
         # AND that have 'TCP' in the title
-        $c->stash->{books} = [$c->model('DB::Book')
+        $c->stash(books => [$c->model('DB::Book')
                                 ->created_after(DateTime->now->subtract(minutes => $mins))
                                 ->search({title => {'like', '%TCP%'}})
-                             ];
+                            ]);
     
         # Set the TT template to use.  You will almost always want to do this
         # in your action methods (action methods respond to user input in
         # your controllers).
-        $c->stash->{template} = 'books/list.tt2';
+        $c->stash(template => 'books/list.tt2');
     }
 
 To try this out, enter the following URL into your browser:
@@ -1203,15 +1202,15 @@ shown here -- the rest of the method should be the same):
         # stash where they can be accessed by the TT template, but only
         # retrieve books created within the last $min number of minutes
         # AND that have 'TCP' in the title
-        $c->stash->{books} = [$c->model('DB::Book')
+        $c->stash(books => [$c->model('DB::Book')
                                 ->created_after(DateTime->now->subtract(minutes => $mins))
                                 ->title_like('TCP')
-                             ];
+                            ]);
     
         # Set the TT template to use.  You will almost always want to do this
         # in your action methods (action methods respond to user input in
         # your controllers).
-        $c->stash->{template} = 'books/list.tt2';
+        $c->stash(template => 'books/list.tt2');
     }
 
 Try out the C<list_recent_tcp> and C<list_recent> URLs as we did above. 
@@ -1233,7 +1232,7 @@ C<lib/MyApp/Schema/Result/Author.pm> and add the following method (as
 always, it must be above the closing "C<1;>"):
 
     #
-    # Helper methods
+    # Row-level helper methods
     #
     sub full_name {
         my ($self) = @_;