X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FManual%2FIntro.pod;h=abd7ed3cd4003c7ad4615249b2f1a3162a371514;hb=66f6e959d5d07f987228c229280bccfd14223fc4;hp=cb09eebda97ca105334a0ea8e2e3b33cc6901277;hpb=6b10c72bff517a4eab3b52aa7f31e1a4cd499484;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Manual/Intro.pod b/lib/Catalyst/Manual/Intro.pod index cb09eeb..abd7ed3 100644 --- a/lib/Catalyst/Manual/Intro.pod +++ b/lib/Catalyst/Manual/Intro.pod @@ -43,11 +43,11 @@ control. Catalyst! =back -If you're unfamiliar with MVC and design patterns, you may want to check out the -original book on the subject, I, by Gamma, Helm, Johson and -Vlissides, also known as the Gang of Four (GoF). You can also just google it. -Many, many web application frameworks are based on MVC, including all those -listed above. +If you're unfamiliar with MVC and design patterns, you may want to check +out the original book on the subject, I, by Gamma, +Helm, Johnson, and Vlissides, also known as the Gang of Four (GoF). You +can also just Google it. Many, many web application frameworks are +based on MVC, including all those listed above. =head3 Flexibility @@ -84,7 +84,7 @@ With Catalyst you register your actions and address them directly. For example: sub hello : Global { my ( $self, $context ) = @_; - $context->response->output('Hello World!'); + $context->response->body('Hello World!'); } Now http://localhost:3000/hello prints "Hello World!". @@ -184,7 +184,6 @@ application, load plugins, define application-wide actions, and extend Catalyst. MyApp->config( name => 'My Application', - root => '/home/joeuser/myapp/root', # You can put anything else you want in here: my_configuration_variable => 'something', @@ -192,13 +191,13 @@ application, load plugins, define application-wide actions, and extend Catalyst. sub default : Private { my ( $self, $context ) = @_; - $context->response->output('Catalyst rockz!'); + $context->response->body('Catalyst rockz!'); } 1; -For most applications, Catalyst requires you to define only two config -parameters: +For most applications, Catalyst requires you to define only one config +parameter: =over 4 @@ -206,15 +205,13 @@ parameters: Name of your application. -=item * B - -Path to additional files such as templates, images, or other static data. - =back -However, you can define as many parameters as you want for plugins or whatever -you need. You can access them anywhere in your application via -C<$context-Econfig-E{$param_name}>. +Optionally, you can specify a B parameter for templates and static data. +If omitted, Catalyst will try to auto-detect the directory's location. You +can define as many parameters as you want for plugins or whatever you +need. You can access them anywhere in your application +via C<$context-Econfig-E{$param_name}>. =head3 Context @@ -233,7 +230,7 @@ Catalyst developers just call it C<$c>: sub hello : Global { my ( $self, $c ) = @_; - $c->res->output('Hello World!'); + $c->res->body('Hello World!'); } The Context contains several important objects: @@ -261,7 +258,7 @@ query parameters, cookies, uploads, headers, and more. The response is like the request, but contains just response-specific information. - $c->res->output('Hello World'); + $c->res->body('Hello World'); $c->res->status(404); $c->res->redirect('http://oook.de'); @@ -298,7 +295,7 @@ application components. For an example, we return to our 'hello' action: sub show_message : Private { my ( $self, $c ) = @_; - $c->res->output( $c->stash->{message} ); + $c->res->body( $c->stash->{message} ); } Note that the stash should be used only for passing data in an individual @@ -336,10 +333,19 @@ Regex matches act globally, i.e. without reference to the namespace from which it is called, so that a C method in the C namespace won't match any form of C, C, C, or C unless you explicitly put this in -the regex. +the regex. To achieve the above, you should consider using a C action. + +=item * B + + sub bar : LocalRegex('^widget(\d+)$') { } -If you use capturing parentheses to extract values within the matching URL (23, -42 in the above example), those values are available in the $c->req->snippets +LocalRegex actions act locally. If you were to use C in +C, the above example would match urls like +http://localhost:3000/catalogue/widget23. + +For both LocalRegex and Regex actions, if you use capturing parentheses to +extract values within the matching URL ("widget23" would capture "23" in the +above example), those values are available in the $c->req->snippets array. If you want to pass arguments at the end of your URL, you must use regex action keys. See L below. @@ -402,6 +408,11 @@ Called when no other action matches. Could be used, for example, for displaying a generic frontpage for the main app, or an error page for individual controllers. +=item * B + +C is much like C except that it takes no arguments +and it is weighted slightly higher in the matching process. + =item * B Called at the beginning of a request, before any matching actions are @@ -556,7 +567,7 @@ debugging enabled). sub show_message : Private { my ( $self, $c ) = @_; - $c->res->output( $c->stash->{message} ); + $c->res->body( $c->stash->{message} ); } A C does not create a new request, so your request @@ -607,12 +618,12 @@ Here are some examples of how to forward to classes and methods. sub say_hello { my ( $self, $c ) = @_; - $c->res->output('Hello World!'); + $c->res->body('Hello World!'); } sub process { my ( $self, $c ) = @_; - $c->res->output('Goodbye World!'); + $c->res->body('Goodbye World!'); } Note that C returns to the calling action and continues @@ -679,8 +690,8 @@ inherit from this class: script/myapp_create.pl view TT TT -where the first C tells the script to create a Template Toolkit -view, and the second tells the script that its name should be C.) +where the first C tells the script that the name of the view should +be C, and the second that it should be a Template Toolkit view.) This gives us a process() method and we can now just do $c->forward('MyApp::V::TT') to render our templates. The base class makes @@ -788,7 +799,7 @@ can always call an outside module that serves as your Model: But by using a Model that is part of your Catalyst application, you gain several things: you don't have to C each component, Catalyst will find and load it automatically at compile-time; you can C to -the module, which can only be done to Catalyst componenents; and only +the module, which can only be done to Catalyst components; and only Catalyst components can be fetched with C<$c-Ecomp('MyApp::M::SomeModel')>. @@ -812,9 +823,9 @@ application. package MyApp::C::Login; - sign-in : Local { } - new-password : Local { } - sign-out : Local { } + sub sign-in : Local { } + sub new-password : Local { } + sub sign-out : Local { } package MyApp::C::Catalog;