X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Manual.git;a=blobdiff_plain;f=lib%2FCatalyst%2FManual%2FTutorial%2FAuthentication.pod;h=66225d8911d2d9b7ff72b32b831a4d931f82a7fc;hp=996ac4c37fe3c4edfde14fe710b9e9cfd47aca03;hb=85d49fb613ae5aabb76647ec250e3d450fabb521;hpb=45d511e089515b7a59b6d943bb79a9fbf0ba45d4 diff --git a/lib/Catalyst/Manual/Tutorial/Authentication.pod b/lib/Catalyst/Manual/Tutorial/Authentication.pod index 996ac4c..66225d8 100644 --- a/lib/Catalyst/Manual/Tutorial/Authentication.pod +++ b/lib/Catalyst/Manual/Tutorial/Authentication.pod @@ -125,8 +125,8 @@ Although we could manually edit the DBIC schema information to include the new tables added in the previous step, let's use the C option on the DBIC model helper to do most of the work for us: - $ script/myapp_create.pl model MyAppDB DBIC::Schema MyApp::Schema::MyAppDB create=static dbi:SQLite:myapp.db - $ ls lib/MyApp/Schema/MyAppDB + $ script/myapp_create.pl model DB DBIC::Schema MyApp::Schema create=static dbi:SQLite:myapp.db + $ ls lib/MyApp/Schema Authors.pm BookAuthors.pm Books.pm Roles.pm UserRoles.pm Users.pm Notice how the helper has added three new table-specific result source @@ -142,7 +142,7 @@ relationship information to the three new result source files. Edit each of these files and add the following information between the C<# DO NOT MODIFY THIS OR ANYTHING ABOVE!> comment and the closing C<1;>: -C: +C: # # Set relationships: @@ -153,7 +153,7 @@ C: # 1) Name of relationship, DBIC will create accessor with this name # 2) Name of the model class referenced by this relationship # 3) Column name in *foreign* table - __PACKAGE__->has_many(map_user_role => 'MyApp::Schema::MyAppDB::UserRoles', 'user_id'); + __PACKAGE__->has_many(map_user_role => 'MyApp::Schema::UserRoles', 'user_id'); # many_to_many(): # args: @@ -164,7 +164,7 @@ C: __PACKAGE__->many_to_many(roles => 'map_user_role', 'role'); -C: +C: # # Set relationships: @@ -175,10 +175,10 @@ C: # 1) Name of relationship, DBIC will create accessor with this name # 2) Name of the model class referenced by this relationship # 3) Column name in *foreign* table - __PACKAGE__->has_many(map_user_role => 'MyApp::Schema::MyAppDB::UserRoles', 'role_id'); + __PACKAGE__->has_many(map_user_role => 'MyApp::Schema::UserRoles', 'role_id'); -C: +C: # # Set relationships: @@ -189,14 +189,14 @@ C: # 1) Name of relationship, DBIC will create accessor with this name # 2) Name of the model class referenced by this relationship # 3) Column name in *this* table - __PACKAGE__->belongs_to(user => 'MyApp::Schema::MyAppDB::Users', 'user_id'); + __PACKAGE__->belongs_to(user => 'MyApp::Schema::Users', 'user_id'); # belongs_to(): # args: # 1) Name of relationship, DBIC will create accessor with this name # 2) Name of the model class referenced by this relationship # 3) Column name in *this* table - __PACKAGE__->belongs_to(role => 'MyApp::Schema::MyAppDB::Roles', 'role_id'); + __PACKAGE__->belongs_to(role => 'MyApp::Schema::Roles', 'role_id'); The code for these three sets of updates is obviously very similar to @@ -204,9 +204,9 @@ the edits we made to the C, C, and C classes created in Part 3. Note that we do not need to make any change to the -C schema file. It simple tells DBIC to +C schema file. It simple tells DBIC to load all of the result source files it finds in below the -C directory, so it will automatically pick +C directory, so it will automatically pick up our new table information. @@ -227,13 +227,13 @@ Look for the three new model objects in the startup debug output: +-------------------------------------------------------------------+----------+ | MyApp::Controller::Books | instance | | MyApp::Controller::Root | instance | - | MyApp::Model::MyAppDB | instance | - | MyApp::Model::MyAppDB::Author | class | - | MyApp::Model::MyAppDB::Books | class | - | MyApp::Model::MyAppDB::BookAuthors | class | - | MyApp::Model::MyAppDB::Roles | class | - | MyApp::Model::MyAppDB::Users | class | - | MyApp::Model::MyAppDB::UserRoles | class | + | MyApp::Model::DB | instance | + | MyApp::Model::DB::Author | class | + | MyApp::Model::DB::Books | class | + | MyApp::Model::DB::BookAuthors | class | + | MyApp::Model::DB::Roles | class | + | MyApp::Model::DB::Users | class | + | MyApp::Model::DB::UserRoles | class | | MyApp::View::TT | instance | '-------------------------------------------------------------------+----------' ... @@ -325,19 +325,19 @@ C file and update it to match: # Use DBIC to retrieve username, password & role information class DBIx::Class # This is the model object created by Catalyst::Model::DBIC - # from your schema (you created 'MyAppDB::User' but as the - # Catalyst startup debug messages show, it was loaded as - # 'MyApp::Model::MyAppDB::Users'). + # from your schema (you created 'MyApp::Schema::User' but as + # the Catalyst startup debug messages show, it was loaded as + # 'MyApp::Model::DB::Users'). # NOTE: Omit 'MyApp::Model' here just as you would when using - # '$c->model("MyAppDB::Users)' - user_class MyAppDB::Users + # '$c->model("DB::Users)' + user_class DB::Users # This is the name of the field in your 'users' table that # contains the user's name id_field username - - + + Inline comments in the code above explain how each field is being used. @@ -352,14 +352,16 @@ Use the Catalyst create script to create two stub controller files: $ script/myapp_create.pl controller Login $ script/myapp_create.pl controller Logout -B: You could easily use a single controller here. For example, +B You could easily use a single controller here. For example, 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, locate the C method (this was automatically inserted by the helpers when we -created the Login controller above), and delete this line: +Then open C, locate the C method (or C 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.'); @@ -371,7 +373,7 @@ Then update it to match: =cut - sub index : Private { + sub index :Path :Args(0) { my ($self, $c) = @_; # Get the username and password from form @@ -403,22 +405,21 @@ will stay 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. -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 option 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 +Note that we could have used something like C, +however partly for historical reasons, and partly for code clarity it +is generally recommended only to use C in +C, and then mainly to generate the 404 not +found page for the application. + +Instead, 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, update the corresponding method in @@ -430,7 +431,7 @@ C to match: =cut - sub index : Private { + sub index :Path :Args(0) { my ($self, $c) = @_; # Clear the user's state @@ -617,17 +618,13 @@ running) and restart it: $ script/myapp_server.pl -B: If you happen to be using Internet Explorer, you may -need to use the command C