X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Manual.git;a=blobdiff_plain;f=lib%2FCatalyst%2FManual%2FTutorial%2F04_BasicCRUD.pod;h=490eb742bf3c64b2a09dfae6e325f630d2ab20d4;hp=2adc72fc90f325a02b813b676ebb24fdea8a9a4e;hb=a608d8ce868536757adabcd074dc4a458339299a;hpb=6961c90667f429d8488551485df6e86dcc0e4de6 diff --git a/lib/Catalyst/Manual/Tutorial/04_BasicCRUD.pod b/lib/Catalyst/Manual/Tutorial/04_BasicCRUD.pod index 2adc72f..490eb74 100644 --- a/lib/Catalyst/Manual/Tutorial/04_BasicCRUD.pod +++ b/lib/Catalyst/Manual/Tutorial/04_BasicCRUD.pod @@ -116,11 +116,9 @@ Edit C 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 @@ -412,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 ***'); @@ -494,7 +492,7 @@ Edit C 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. @@ -548,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'); } @@ -908,7 +904,10 @@ Cspan class="message"E> line. Point your browser to L (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 Another popular method for maintaining server-side information across a redirect is to use the C technique we @@ -1019,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: @@ -1085,13 +1085,13 @@ Then add the following method to the C: # 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 @@ -1102,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 @@ -1135,15 +1135,15 @@ C 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: @@ -1202,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 and C URLs as we did above. @@ -1232,7 +1232,7 @@ C 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) = @_;