X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FManual%2FTutorial%2FAdvancedCRUD.pod;h=c68d6c846b26058f6039bbabb261dbe3e2339886;hb=be16bacd7d5dcea0165355cb7bbd8a14c1af184e;hp=22f562b3ff0a42773d3cba903141ad4550a555a9;hpb=64ccd8a8bfbc16276c044c94702b1440c2897695;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Manual/Tutorial/AdvancedCRUD.pod b/lib/Catalyst/Manual/Tutorial/AdvancedCRUD.pod index 22f562b..c68d6c8 100644 --- a/lib/Catalyst/Manual/Tutorial/AdvancedCRUD.pod +++ b/lib/Catalyst/Manual/Tutorial/AdvancedCRUD.pod @@ -2,8 +2,6 @@ Catalyst::Manual::Tutorial::AdvancedCRUD - Catalyst Tutorial - Part 8: Advanced CRUD - - =head1 OVERVIEW This is B for the Catalyst tutorial. @@ -46,12 +44,10 @@ B =item 9 -L +L =back - - =head1 DESCRIPTION This part of the tutorial explores more advanced functionality for @@ -64,24 +60,24 @@ forms and model objects. In keeping with the Catalyst (and Perl) spirit of flexibility, there are many different ways approach advanced CRUD operations in a Catalyst environment. One alternative is to use -L -to instantly construct a set of Controller methods and templates for -basic CRUD operations. Although a popular subject in Quicktime movies -that serve as promotional material for various frameworks, more -real-world applications require more control. Other options include -L and +L +to instantly construct a set of Controller methods and templates for +basic CRUD operations. Although a popular subject in Quicktime +movies that serve as promotional material for various frameworks, +real-world applications generally require more control. Other +options include L and L. -Here, we will make use of the L to not only -ease form creation, but to also provide validation of the submitted -data. The approached used by the part of the tutorial is to slowly -incorporate additional L functionality in a -step-wise fashion (we start with fairly simple form creation and then -move on to more complex and "magical" features such as validation and +Here, we will make use of the L to not only +ease form creation, but to also provide validation of the submitted +data. The approached used by the part of the tutorial is to slowly +incorporate additional L functionality in a +step-wise fashion (we start with fairly simple form creation and then +move on to more complex and "magical" features such as validation and auto-population/auto-saving). -B Part 8 of the tutorial is optional. Users who do not which to -use L may skip this section. +B Part 8 of the tutorial is optional. Users who do not wish to +use L may skip this part. B: Note that all of the code for this part of the tutorial can be pulled from the Catalyst Subversion repository in one step with the @@ -90,22 +86,18 @@ following command: svn checkout http://dev.catalyst.perl.org/repos/Catalyst/trunk/examples/Tutorial@### IMPORTANT: Does not work yet. Will be completed for final version. - - =head1 C FORM CREATION This section looks at how L can be used to add additional functionality to the manually created form from Part 3. - =head2 Add the C Plugin Open C in your editor and add the following to the list of -plugins (be sure to leave the existing plugins enabled: +plugins (be sure to leave the existing plugins enabled): HTML::Widget - =head2 Add a Form Creation Helper Method Open C in your editor and add the @@ -119,7 +111,7 @@ following method: sub make_book_widget { my ($self, $c) = @_; - + # Create an HTML::Widget to build the form my $w = $c->widget('book_form')->method('post'); @@ -134,19 +126,17 @@ following method: $w->element('Select', 'authors')->label('Authors') ->options(@authors); $w->element('Submit', 'submit' )->value('submit'); - + # Return the widget return $w; } This method provides a central location (so it can be called by multiple -actions, such as create and edit) that builds an HTML::Wiget-based form -with the appropriate fields. The "Get Authors" code uses DBIC to -retrieve a list of model objects and then uses C to quickly create -a hash where the hash keys are the database primary keys from the -authors table and the associated values are the last names of the -authors. - +actions, such as C and C) that builds an HTML::Widget-based +form with the appropriate fields. The "Get Authors" code uses DBIC to +retrieve a list of model objects and then uses C to create a hash +where the hash keys are the database primary keys from the authors table +and the associated values are the last names of the authors. =head2 Add Actions to Display and Save the Form @@ -214,7 +204,6 @@ so allows us to have the same form submit the data to different actions (e.g., C for a create operation but C to update an existing book object). - =head2 Update the CSS Edit C and add the following lines to the bottom of @@ -245,19 +234,18 @@ These changes will display form elements vertically and also show error messages in red. Note that we are pulling the color scheme settings from the C file that was created by the TTSite helper. This allows us to change the color used by various error styles -in the CCS from a single location. - +in the CSS from a single location. =head2 Create a Template Page To Display The Form -C +Open C in your editor and enter the following: + [% META title = 'Create/Update Book' %] [% widget_result.as_xml %]

Return to book list

- =head2 Add Links for Create and Update via C Open C in your editor and add the following to @@ -269,7 +257,6 @@ the bottom of the existing file: Update

- =head2 Test The Create Form Press C to kill the previous server instance (if it's still @@ -290,7 +277,7 @@ bogus information. Although we have constrained the authors with the drop-down list, there are no restrictions on items such as the length of the title (for example, you can create a one-letter title) and value for the rating (you can use any number you want, and even non-numeric values -with SQLite). The next section seeks to address this concern. +with SQLite). The next section will address this concern. B Depending on the database you are using and how you established the columns in your tables, the database could obviously provide various @@ -298,7 +285,6 @@ levels of "type enforcement" on your data. The key point being made in the previous paragraph is that the I itself is not performing any validation. - =head1 C VALIDATION AND FILTERING Although the use of L in the previous section @@ -310,7 +296,6 @@ form contains a valid email address). Filtering can be used to remove extraneous whitespace from fields or to escape meta-characters in user input. - =head2 Add Constraints and Filters to the Widget Creation Method Open C in your editor and update the @@ -319,7 +304,7 @@ been marked with a C<*** NEW:> comment): sub make_book_widget { my ($self, $c) = @_; - + # Create an HTML::Widget to build the form my $w = $c->widget('book_form')->method('post'); @@ -327,7 +312,7 @@ been marked with a C<*** NEW:> comment): my @authorObjs = $c->model("MyAppDB::Author")->all(); my @authors = map {$_->id => $_->last_name } sort {$a->last_name cmp $b->last_name} @authorObjs; - + # Create the form feilds $w->element('Textfield', 'title' )->label('Title')->size(60); $w->element('Textfield', 'rating' )->label('Rating')->size(1); @@ -376,7 +361,6 @@ Two filters are run on every field to remove and escape unwanted input. =back - =head2 Rebuild the Form Submission Method to Include Validation Edit C and change C to @@ -463,7 +447,6 @@ similar to the prior version of the C method. =back - =head2 Try Out the Form Press C to kill the previous server instance (if it's still running) and restart it: @@ -476,7 +459,6 @@ two, and zero authors. When you click Submit, the HTML::Widget C items will validate the logic and insert feedback as appropriate. - =head1 Enable C Support In this section we will take advantage of some of the "auto-population" @@ -488,7 +470,7 @@ model classes: =item * -fill_wiget() +fill_widget() Takes data from the database and transfers it to your form widget. @@ -504,7 +486,6 @@ records in the database. In other words, the two methods are a mirror image of each other: one reads from the database while the other writes to the database. - =head2 Add C to DBIC Model In order to use L, we @@ -515,7 +496,6 @@ C and update the C line to match: __PACKAGE__->load_components(qw/PK::Auto Core HTMLWidget/); - =head2 Use C in C Edit C and update C to @@ -577,16 +557,13 @@ C does not currently handle the relationships between tables. - =head1 AUTHOR Kennedy Clark, C -Please report any errors, issues or suggestions to the author. - -Copyright 2006, Kennedy Clark. All rights reserved. - -This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. - -Version: .94 +Please report any errors, issues or suggestions to the author. The +most recent version of the Catlayst Tutorial can be found at +L. +Copyright 2006, Kennedy Clark, under Creative Commons License +(L).