From: Kennedy Clark
Date: Wed, 5 Jul 2006 21:29:50 +0000 (+0000)
Subject: Switch from 'sub base :Path :Args(0)' to 'sub index : Private' for
X-Git-Tag: 5.7099_04~427
X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=be16bacd7d5dcea0165355cb7bbd8a14c1af184e
Switch from 'sub base :Path :Args(0)' to 'sub index : Private' for
Login and Logout controllers
Minor link fix in Auth.pod
Split out tests for title & author in add of test script.
Fix whitespace in testing script.
Misc fixes to AdvancedCRUD.pod.
---
diff --git a/lib/Catalyst/Manual/Tutorial/AdvancedCRUD.pod b/lib/Catalyst/Manual/Tutorial/AdvancedCRUD.pod
index eedde71..c68d6c8 100644
--- a/lib/Catalyst/Manual/Tutorial/AdvancedCRUD.pod
+++ b/lib/Catalyst/Manual/Tutorial/AdvancedCRUD.pod
@@ -60,23 +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.
-
-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
+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
auto-population/auto-saving).
B Part 8 of the tutorial is optional. Users who do not wish to
-use L may skip this section.
+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
@@ -87,7 +88,7 @@ following command:
=head1 C FORM CREATION
-This section looks at how L can be used to
+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
@@ -110,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');
@@ -125,7 +126,7 @@ following method:
$w->element('Select', 'authors')->label('Authors')
->options(@authors);
$w->element('Submit', 'submit' )->value('submit');
-
+
# Return the widget
return $w;
}
@@ -237,7 +238,8 @@ 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 %]
@@ -302,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');
@@ -310,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);
@@ -559,7 +561,9 @@ between tables.
Kennedy Clark, C
-Please report any errors, issues or suggestions to the author.
+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).
diff --git a/lib/Catalyst/Manual/Tutorial/Authentication.pod b/lib/Catalyst/Manual/Tutorial/Authentication.pod
index 0c8e2b3..d5401f8 100644
--- a/lib/Catalyst/Manual/Tutorial/Authentication.pod
+++ b/lib/Catalyst/Manual/Tutorial/Authentication.pod
@@ -414,7 +414,13 @@ you could have a C controller with both C and C
actions. Remember, Catalyst is designed to be very flexible, and leaves
such matters up to you, the designer and programmer.
-Then open C and add:
+Then open C, locate the C method (this was automatically inserted by the helpers when we
+created the Login controller above), and delete this line:
+
+ $c->response->body('Matched MyApp::Controller::Login in Login.');
+
+Then update it to match:
=head2 base
@@ -422,7 +428,7 @@ Then open C and add:
=cut
- sub base :Path :Args(0) {
+ sub index : Private {
my ($self, $c) = @_;
# Get the username and password from form
@@ -453,20 +459,24 @@ at the login page but receive an error message. If the C and
C values are not present in the form, the user will be taken
to the empty login form.
-We are using C here to specifically match
-the URL C. C actions (aka, "literal actions") create URI
-matches relative to the namespace of the controller where they are defined.
-Although C supports arguments that allow relative and absolute paths
-to be defined, here we use an empty C definition to match on just the
-name of the controller itself. The method name, C, is arbitrary.
-We make the match even more specific with the C<:Args(0)> action modifier
--- this forces the match on I C, not C.
-
Note that we could have used something like C;
however, the use of C actions is discouraged because it does
not receive path args as with other actions. The recommended practice
is to only use C in C.
+Another options would be to use something like
+C (where the C<...> refers to the login
+code shown in C above). We are using C here to specifically match the URL C.
+C actions (aka, "literal actions") create URI matches relative to
+the namespace of the controller where they are defined. Although
+C supports arguments that allow relative and absolute paths to be
+defined, here we use an empty C definition to match on just the
+name of the controller itself. The method name, C, is arbitrary.
+We make the match even more specific with the C<:Args(0)> action
+modifier -- this forces the match on I C, not
+C.
+
Next, create a corresponding method in C:
=head2 base
@@ -475,7 +485,7 @@ Next, create a corresponding method in C:
=cut
- sub base :Path :Args(0) {
+ sub index : Private {
my ($self, $c) = @_;
# Clear the user's state
@@ -485,8 +495,9 @@ Next, create a corresponding method in C:
$c->response->redirect($c->uri_for('/'));
}
-Note that we are using the same C style
-of action as with the login logic.
+As with the login controller, be sure to delete the
+C<$c->response->body('Matched MyApp::Controller::Logout in Logout.');>
+line of the C.
=head2 Add a Login Form TT Template Page
@@ -654,11 +665,11 @@ bottom:
Create
-Reload your browser and you should now see a "Login" and "Create" links
-at the bottom of the page (as mentioned earlier, you can update
-template files without reloading the development server). Click this
-link to return to the login page. This time you I see the
-"You are already logged in" message.
+Reload your browser and you should now see a "Login" and "Create" links
+at the bottom of the page (as mentioned earlier, you can update template
+files without reloading the development server). Click the first link
+to return to the login page. This time you I see the "You are
+already logged in" message.
Finally, click the C link on the C page.
You should stay at the login page, but the message should change to "You
@@ -764,6 +775,15 @@ You should now be able to go to L and
login as before. When done, click the "Logout" link on the login page
(or point your browser at L).
+B If you receive the debug screen in your browser with a
+C error message,
+make sure that you are using v0.07 of
+L.
+The following command can be a useful way to quickly dump the version number
+of this module on your system:
+
+ perl -MCatalyst::Plugin::Authorization::ACL -e 'print $Catalyst::Plugin::Authorization::ACL::VERSION, "\n";'
+
=head1 AUTHOR
diff --git a/lib/Catalyst/Manual/Tutorial/Testing.pod b/lib/Catalyst/Manual/Tutorial/Testing.pod
index d4b64d5..6cc218b 100644
--- a/lib/Catalyst/Manual/Tutorial/Testing.pod
+++ b/lib/Catalyst/Manual/Tutorial/Testing.pod
@@ -155,13 +155,13 @@ editor and enter the following:
# all tests. Better to replace "'no_plan'" with "tests => 30" so it
# knows exactly how many tests need to be run (and will tell you if
# not), but 'no_plan' is nice for quick & dirty tests
-
+
use Test::More 'no_plan';
# Need to specify the name of your app as arg on next line
# Can also do:
# use Test::WWW::Mechanize::Catalyst "MyApp";
-
+
use ok "Test::WWW::Mechanize::Catalyst" => "MyApp";
# Create two 'user agents' to simulate two different users ('test01' & 'test02')
@@ -218,7 +218,8 @@ editor and enter the following:
$ua1->get_ok("http://localhost/books/url_create/TestTitle/2/4",
"'test01' formless create");
$ua1->title_is("Book Created", "Book created title");
- $ua1->content_contains("Added book 'TestTitle' by 'Stevens'", "Check added OK");
+ $ua1->content_contains("Added book 'TestTitle'", "Check title added OK");
+ $ua1->content_contains("by 'Stevens'", "Check author added OK");
$ua1->content_contains("a rating of 2.", "Check rating added");
# Make sure the new book shows in the list