X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Manual.git;a=blobdiff_plain;f=lib%2FCatalyst%2FManual%2FTutorial%2FBasicCRUD.pod;h=9d6f6b51120e8ff221335265b2b90e24c5a65096;hp=2e688bb399cb5a7de7eb11e1724094eac6f42b37;hb=fe01b24f85098a731125f36fc4de26a654ac7efc;hpb=3533daff0314522f79dff9c618da087568f1378c diff --git a/lib/Catalyst/Manual/Tutorial/BasicCRUD.pod b/lib/Catalyst/Manual/Tutorial/BasicCRUD.pod index 2e688bb..9d6f6b5 100644 --- a/lib/Catalyst/Manual/Tutorial/BasicCRUD.pod +++ b/lib/Catalyst/Manual/Tutorial/BasicCRUD.pod @@ -66,9 +66,17 @@ focus on the Create and Delete aspects of CRUD. More advanced capabilities, including full Update functionality, will be addressed in Part 9. +Although this part of the tutorial will show you how to build CRUD +functionality yourself, another option is to use a "CRUD builder" type +of tool to automate the process. You get less control, but it's quick +and easy. For example, see +L, +L, and +L. + You can checkout the source code for this example from the catalyst subversion repository as per the instructions in -L +L. =head1 FORMLESS SUBMISSION @@ -97,7 +105,7 @@ Edit C and enter the following method: # Call create() on the book model object. Pass the table # columns/field values we want to set as hash values - my $book = $c->model('MyAppDB::Books')->create({ + my $book = $c->model('DB::Books')->create({ title => $title, rating => $rating }); @@ -164,7 +172,7 @@ Edit C and then enter: [% # Provide a link back to the list page -%] [% # 'uri_for()' builds a full URI; e.g., 'http://localhost:3000/books/list' -%] -

Return to list

+

Return to list

[% # Try out the TT Dumper (for development only!) -%]
@@ -172,22 +180,20 @@ Edit C and then enter:
     [% Dumper.dump(book) %]
     
-The TT C directive allows access to a variety of plugin modules (TT -plugins, that is, not Catalyst plugins) to add extra functionality to -the base TT capabilities. Here, the plugin allows L -"pretty printing" of objects and variables. Other than that, the rest -of the code should be familiar from the examples in Part 3. +The TT C directive allows access to a variety of plugin modules +(TT plugins, that is, not Catalyst plugins) to add extra functionality +to the base TT capabilities. Here, the plugin allows +L "pretty printing" of objects and +variables. Other than that, the rest of the code should be familiar +from the examples in Part 3. -B As mentioned earlier, the C view -class created by TTSite redefines the name used to access the Catalyst -context object in TT templates from the usual C to C. =head2 Try the C Feature If the application is still running from before, use C to kill it. Then restart the server: - $ script/myapp_server.pl + $ DBIC_TRACE=1 script/myapp_server.pl Note that new path for C appears in the startup debug output. @@ -218,9 +224,9 @@ The C statements are obviously adding the book and linking it to the existing record for Richard Stevens. The C Rating: @@ -278,6 +285,7 @@ Open C in your editor and enter: Note that we have specified the target of the form data as C, the method created in the section that follows. + =head2 Add a Method to Process Form Values and Update Database Edit C and add the following method to @@ -298,7 +306,7 @@ save the form information to the database: my $author_id = $c->request->params->{author_id} || '1'; # Create the book - my $book = $c->model('MyAppDB::Books')->create({ + my $book = $c->model('DB::Books')->create({ title => $title, rating => $rating, }); @@ -326,7 +334,7 @@ it. Then restart the server: Point your browser to L and enter "TCP/IP Illustrated, Vol 3" for the title, a rating of 5, and an -author ID of 4. You should then be forwarded to the same +author ID of 4. You should then see the output of the same C template seen in earlier examples. Finally, click "Return to list" to view the full list of books. @@ -380,22 +388,31 @@ and 2) the four lines for the Delete link near the bottom). [% # Add a link to delete a book %] - Delete + Delete [% END -%] -The additional code is obviously designed to add a new column to the -right side of the table with a C "button" (for simplicity, links -will be used instead of full HTML buttons). +The additional code is obviously designed to add a new column to the +right side of the table with a C "button" (for simplicity, +links will be used instead of full HTML buttons). + +B You should use more than just a simple link with your +applications. Consider using some sort of of confirmation page +(typically with unique actions in your controller for both the +confirmation and the actual delete operation). Also, you should try +to use an HTTP POST operation (versus the GET used here) for +operations that change the state of your application (e.g., the +database). + =head2 Add a Delete Action to the Controller Open C in your editor and add the following method: - =head2 delete + =head2 delete Delete a book @@ -406,7 +423,7 @@ following method: my ($self, $c, $id) = @_; # Search for the book and then delete it - $c->model('MyAppDB::Books')->search({id => $id})->delete_all; + $c->model('DB::Books')->search({id => $id})->delete_all; # Set a status message to be displayed at the top of the view $c->stash->{status_msg} = "Book deleted."; @@ -479,7 +496,7 @@ C method to match: my ($self, $c, $id) = @_; # Search for the book and then delete it - $c->model('MyAppDB::Books')->search({id => $id})->delete_all; + $c->model('DB::Books')->search({id => $id})->delete_all; # Set a status message to be displayed at the top of the view $c->stash->{status_msg} = "Book deleted."; @@ -521,7 +538,7 @@ C method to match the following: my ($self, $c, $id) = @_; # Search for the book and then delete it - $c->model('MyAppDB::Books')->search({id => $id})->delete_all; + $c->model('DB::Books')->search({id => $id})->delete_all; # Redirect the user back to the list page with status msg as an arg $c->response->redirect($c->uri_for('/books/list', @@ -530,18 +547,23 @@ C method to match the following: This modification simply leverages the ability of C to include an arbitrary number of name/value pairs in a hash reference. Next, we -need to update C to handle C as a +need to update C to handle C as a query parameter: - - + ...
- [% status_msg || Catalyst.request.params.status_msg %] - [% error_msg %] - [% content %] -
- - + [%# Status and error messages %] + [% status_msg || c.request.params.status_msg %] + [% error_msg %] + [%# This is where TT will stick all of your template's contents. -%] + [% content %] + + ... + +Although the sample above only shows the C div, leave the +rest of the file intact -- the only change we made to the C +was to add "C<|| c.request.params.status_msg>" to the +Cspan class="message"E> line. =head2 Try the Delete and Redirect With Query Param Logic @@ -567,8 +589,8 @@ Kennedy Clark, C Please report any errors, issues or suggestions to the author. The most recent version of the Catalyst Tutorial can be found at -L. +L. -Copyright 2006, Kennedy Clark, under Creative Commons License -(L). +Copyright 2006-2008, Kennedy Clark, under Creative Commons License +(L).