actions. Remember, Catalyst is designed to be very flexible, and leaves
such matters up to you, the designer and programmer.
-Then open C<lib/MyApp/Controller/Login.pm>, locate the C<sub index :
-Private> method (this was automatically inserted by the helpers when we
-created the Login controller above), and delete this line:
+Then open C<lib/MyApp/Controller/Login.pm>, locate the C<sub index
+:Path :Args(0)> method (or C<sub index : Private> if you are using an
+older version of Catalyst) that 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.');
=cut
- sub index : Private {
+ sub index :Path :Args(0) {
my ($self, $c) = @_;
# Get the username and password from form
C<username> and C<password> values are not present in the form, the
user will be taken to the empty login form.
-Note that we could have used something like C<sub default :Private>;
-however, the use of C<default> actions is discouraged because it does
-not receive path args as with other actions. The recommended practice
-is to only use C<default> in C<MyApp::Controller::Root>.
-
-Another option would be to use something like
-C<sub base :Path :Args(0) {...}> (where the C<...> refers to the login
-code shown in C<sub index : Private> above). We are using C<sub base
-:Path :Args(0) {...}> here to specifically match the URL C</login>.
-C<Path> actions (aka, "literal actions") create URI matches relative to
-the namespace of the controller where they are defined. Although
-C<Path> supports arguments that allow relative and absolute paths to be
-defined, here we use an empty C<Path> definition to match on just the
-name of the controller itself. The method name, C<base>, is arbitrary.
-We make the match even more specific with the C<:Args(0)> action
-modifier -- this forces the match on I<only> C</login>, not
+Note that we could have used something like C<sub default :Path> (or
+even C<sub default : Private>; however, the use of C<default> actions
+is discouraged because it does not receive path args as with other
+actions. The recommended practice is to only use C<default> in
+C<MyApp::Controller::Root>.
+
+Instead, we are using C<sub base :Path :Args(0) {...}> here to
+specifically match the URL C</login>. C<Path> actions (aka, "literal
+actions") create URI matches relative to the namespace of the
+controller where they are defined. Although C<Path> supports
+arguments that allow relative and absolute paths to be defined, here
+we use an empty C<Path> definition to match on just the name of the
+controller itself. The method name, C<index>, is arbitrary. We make
+the match even more specific with the C<:Args(0)> action modifier --
+this forces the match on I<only> C</login>, not
C</login/somethingelse>.
Next, update the corresponding method in
=cut
- sub index : Private {
+ sub index :Path :Args(0) {
my ($self, $c) = @_;
# Clear the user's state