Fix POD errors
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Manual / Intro.pod
1 =head1 NAME
2
3 Catalyst::Manual::Intro - Introduction to Catalyst
4
5 =head1 DESCRIPTION
6
7 This is a brief introduction to Catalyst. It explains the most important
8 features of how Catalyst works and shows how to get a simple application
9 up and running quickly. For an introduction (without code) to Catalyst
10 itself, and why you should be using it, see L<Catalyst::Manual::About>.
11 For a systematic step-by-step introduction to writing an application
12 with Catalyst, see L<Catalyst::Manual::Tutorial>.
13
14 =head2 What is Catalyst?
15
16 Catalyst is an elegant web application framework, extremely flexible
17 yet extremely simple. It's similar to Ruby on Rails, Spring (Java),
18 and L<Maypole>, upon which it was originally based. Its most important
19 design philosphy is to provide easy access to all the tools you need
20 to develop web applications, with few restrictions on how you need to
21 use these tools. However, this does mean that it is always possible to
22 do things in a different way. Other web frameworks are B<initially>
23 simpler to use, but achieve this by locking the programmer into a
24 single set of tools. Catalyst's emphasis on flexibility means that you
25 have to think more to use it. We view this as a feature.  For example,
26 this leads to Catalyst being more suited to system integration tasks
27 than other web frameworks.
28
29 =head3 MVC
30
31 Catalyst follows the Model-View-Controller (MVC) design pattern,
32 allowing you to easily separate concerns, like content, presentation,
33 and flow control, into separate modules. This separation allows you to
34 modify code that handles one concern without affecting code that handles
35 the others. Catalyst promotes the re-use of existing Perl modules that
36 already handle common web application concerns well.
37
38 Here's how the Model, View, and Controller map to those concerns, with
39 examples of well-known Perl modules you may want to use for each.
40
41 =over 4
42
43 =item * B<Model>
44
45 Access and modify content (data). L<DBIx::Class>, L<Class::DBI>,
46 L<Xapian>, L<Net::LDAP>...
47
48 =item * B<View>
49
50 Present content to the user. L<Template Toolkit|Template>,
51 L<Mason|HTML::Mason>, L<HTML::Template>...
52
53 =item * B<Controller>
54
55 Control the whole request phase, check parameters, dispatch actions, flow
56 control. Catalyst itself!
57
58 =back
59
60 If you're unfamiliar with MVC and design patterns, you may want to
61 check out the original book on the subject, I<Design Patterns>, by
62 Gamma, Helm, Johnson, and Vlissides, also known as the Gang of Four
63 (GoF).  Many, many web application frameworks are based on MVC, which
64 is becoming a popular design paradigm for the world wide web.
65
66 =head3 Flexibility
67
68 Catalyst is much more flexible than many other frameworks. Rest assured
69 you can use your favorite Perl modules with Catalyst.
70
71 =over 4
72
73 =item * B<Multiple Models, Views, and Controllers>
74
75 To build a Catalyst application, you handle each type of concern inside
76 special modules called L</Components>. Often this code will be very
77 simple, just calling out to Perl modules like those listed above under
78 L</MVC>. Catalyst handles these components in a very flexible way. Use
79 as many Models, Views, and Controllers as you like, using as many
80 different Perl modules as you like, all in the same application. Want to
81 manipulate multiple databases, and retrieve some data via LDAP? No
82 problem. Want to present data from the same Model using L<Template
83 Toolkit|Template> and L<PDF::Template>? Easy.
84
85 =item * B<Reuseable Components>
86
87 Not only does Catalyst promote the re-use of already existing Perl
88 modules, it also allows you to re-use your Catalyst components in
89 multiple Catalyst applications.
90
91 =item * B<Unrestrained URL-to-Action Dispatching>
92
93 Catalyst allows you to dispatch any URLs to any application L</Actions>,
94 even through regular expressions! Unlike most other frameworks, it
95 doesn't require mod_rewrite or class and method names in URLs.
96
97 With Catalyst you register your actions and address them directly. For
98 example:
99
100     sub hello : Global {
101         my ( $self, $context ) = @_;
102         $context->response->body('Hello World!');
103     }
104
105 Now http://localhost:3000/hello prints "Hello World!".
106
107 =item * B<Support for CGI, mod_perl, Apache::Request, FastCGI>
108
109 Use L<Catalyst::Engine::Apache> or L<Catalyst::Engine::CGI>. Other
110 engines are also available.
111
112 =back
113
114 =head3 Simplicity
115
116 The best part is that Catalyst implements all this flexibility in a very
117 simple way.
118
119 =over 4
120
121 =item * B<Building Block Interface>
122
123 Components interoperate very smoothly. For example, Catalyst
124 automatically makes a L</Context> object available to every
125 component. Via the context, you can access the request object, share
126 data between components, and control the flow of your
127 application. Building a Catalyst application feels a lot like snapping
128 together toy building blocks, and everything just works.
129
130 =item * B<Component Auto-Discovery>
131
132 No need to C<use> all of your components. Catalyst automatically finds
133 and loads them.
134
135 =item * B<Pre-Built Components for Popular Modules>
136
137 See L<Catalyst::Model::DBIC::Schema> for L<DBIx::Class>, or
138 L<Catalyst::View::TT> for L<Template Toolkit|Template>.
139
140 =item * B<Built-in Test Framework>
141
142 Catalyst comes with a built-in, lightweight http server and test
143 framework, making it easy to test applications from the web browser,
144 and the command line.
145
146 =item * B<Helper Scripts>
147
148 Catalyst provides helper scripts to quickly generate running starter
149 code for components and unit tests. Install L<Catalyst::Devel> and see
150 L<Catalyst::Helper>.
151
152 =back
153
154 =head2 Quickstart
155
156 Here's how to install Catalyst and get a simple application up and
157 running, using the helper scripts described above.
158
159 =head3 Install
160
161 Installation of Catalyst can be a time-consuming and frustrating
162 effort, due to its large number of dependencies. The easiest way
163 to get up and running is to use Matt Trout's C<cat-install>
164 script, from L<http://www.shadowcatsystems.co.uk/static/cat-install>,
165 and then install L<Catalyst::Devel>.
166
167     # perl cat-install
168     # perl -MCPAN -e 'install Catalyst::Devel'
169
170 =head3 Setup
171
172     $ catalyst.pl MyApp
173     # output omitted
174     $ cd MyApp
175     $ script/myapp_create.pl controller Library::Login
176
177 =head3 Run
178
179     $ script/myapp_server.pl
180
181 Now visit these locations with your favorite browser or user agent to see
182 Catalyst in action:
183
184 (NOTE: Although we create a controller here, we don't actually use it.
185 Both of these URLs should take you to the welcome page.)
186
187
188 =over 4
189
190 =item http://localhost:3000/
191
192 =item http://localhost:3000/library/login/
193
194 =back
195
196 =head2 How It Works
197
198 Let's see how Catalyst works, by taking a closer look at the components
199 and other parts of a Catalyst application.
200
201 =head3 Components
202
203 Catalyst has an uncommonly flexible component system. You can define as
204 many L</Models>, L</Views>, and L</Controllers> as you like. As discussed
205 previously, the general idea is that the View is responsible for the
206 output of data to the user (typically via a web browser, but a View can
207 also generate PDFs or e-mails, for example); the Model is responsible 
208 for providing data (typically from a relational database); and the
209 Controller is responsible for interacting with the user and deciding
210 how user input determines what actions the application takes.
211
212 In the world of MVC, there are frequent discussions and disagreements
213 about the nature of each element - whether certain types of logic
214 belong in the Model or the Controller, etc. Catalyst's flexibility
215 means that this decision is entirely up to you, the programmer; 
216 Catalyst doesn't enforce anything. See L<Catalyst::Manual::About> for
217 a general discussion of these issues.
218
219 All components must inherit from L<Catalyst::Base>, which provides a
220 simple class structure and some common class methods like C<config> and
221 C<new> (constructor).
222
223     package MyApp::Controller::Catalog;
224
225     use strict;
226     use base 'Catalyst::Base';
227
228     __PACKAGE__->config( foo => 'bar' );
229
230     1;
231
232 You don't have to C<use> or otherwise register Models, Views, and
233 Controllers.  Catalyst automatically discovers and instantiates them
234 when you call C<setup> in the main application. All you need to do is
235 put them in directories named for each Component type. You can use a
236 short alias for each one.
237
238 =over 4
239
240 =item * B<MyApp/Model/> 
241
242 =item * B<MyApp/M/>
243
244 =item * B<MyApp/View/>
245
246 =item * B<MyApp/V/>
247
248 =item * B<MyApp/Controller/>
249
250 =item * B<MyApp/C/>
251
252 =back
253
254 In older versions of Catalyst, the recommended practice (and the one
255 automatically created by helper scripts) was to name the directories
256 C<M/>, C<V/>, and C<C/>. Though these still work, we now recommend
257 the use of the full names.
258
259 =head4 Views
260
261 To show how to define views, we'll use an already-existing base class for the
262 L<Template Toolkit|Template>, L<Catalyst::View::TT>. All we need to do is
263 inherit from this class:
264
265     package MyApp::View::TT;
266
267     use strict;
268     use base 'Catalyst::View::TT';
269
270     1;
271
272 (You can also generate this automatically by using the helper script:
273
274     script/myapp_create.pl view TT TT
275
276 where the first C<TT> tells the script that the name of the view should
277 be C<TT>, and the second that it should be a Template Toolkit view.)
278
279 This gives us a process() method and we can now just do
280 $c->forward('MyApp::View::TT') to render our templates. The base class
281 makes process() implicit, so we don't have to say
282 C<$c-E<gt>forward(qw/MyApp::View::TT process/)>.
283
284     sub hello : Global {
285         my ( $self, $c ) = @_;
286         $c->stash->{template} = 'hello.tt';
287     }
288
289     sub end : Private {
290         my ( $self, $c ) = @_;
291         $c->forward( $c->view('TT') );
292     }
293
294 You normally render templates at the end of a request, so it's a perfect
295 use for the global C<end> action.
296
297 In practice, however, you would use a default C<end> action as supplied
298 by L<Catalyst::Action::RenderView>.
299
300 Also, be sure to put the template under the directory specified in
301 C<$c-E<gt>config-E<gt>{root}>, or you'll end up looking at the debug
302 screen.
303
304 =head4 Models
305
306 Models are providers of data. This data could come from anywhere - a
307 search engine index, a spreadsheet, the file system - but typically a
308 Model represents a database table. The data source does not
309 intrinsically have much to do with web applications or Catalyst - it
310 could just as easily be used to write an offline report generator or a
311 command-line tool.
312
313 To show how to define models, again we'll use an already-existing base
314 class, this time for L<DBIx::Class>: L<Catalyst::Model::DBIC::Schema>.
315 We'll also need L<DBIx::Class::Schema::Loader>.
316
317 But first, we need a database.
318
319     -- myapp.sql
320     CREATE TABLE foo (
321         id INTEGER PRIMARY KEY,
322         data TEXT
323     );
324
325     CREATE TABLE bar (
326         id INTEGER PRIMARY KEY,
327         foo INTEGER REFERENCES foo,
328         data TEXT
329     );
330
331     INSERT INTO foo (data) VALUES ('TEST!');
332
333     % sqlite /tmp/myapp.db < myapp.sql
334
335 Now we can create a DBIC::SchemaLoader component for this database.
336
337     script/myapp_create.pl model DBIC DBIC::SchemaLoader 'dbi:SQLite:/tmp/myapp.db'
338
339 L<DBIx::Class::Schema::Loader> automatically loads table layouts and
340 relationships. Use the stash to pass data to your templates.
341
342 We add the following to MyApp/Controller/Root.pm
343
344     sub view : Global {
345         my ( $self, $c, $id ) = @_;
346         
347         $c->stash->{item} = $c->model('DBIC::Foo')->find($id);
348     }
349
350     1;
351     
352     sub end : Private {
353         my ( $self, $c ) = @_;
354         
355         $c->stash->{template} ||= 'index.tt';
356         $c->forward( $c->view('TT') );
357     }
358
359 We then create a new template file "root/index.tt" containing:
360
361     The Id's data is [% item.data %]
362
363 Models do not have to be part of your Catalyst application; you
364 can always call an outside module that serves as your Model:
365
366     # in a Controller
367     sub list : Local {
368       my ( $self, $c ) = @_;
369       
370       $c->stash->{template} = 'list.tt';
371       
372       use Some::Outside::Database::Module;
373       my @records = Some::Outside::Database::Module->search({
374         artist => 'Led Zeppelin',
375         });
376       
377       $c->stash->{records} = \@records;
378     }
379
380 But by using a Model that is part of your Catalyst application, you
381 gain several things: you don't have to C<use> each component, Catalyst
382 will find and load it automatically at compile-time; you can
383 C<forward> to the module, which can only be done to Catalyst
384 components.  Only Catalyst components can be fetched with
385 C<$c-E<gt>model('SomeModel')>.
386
387 Happily, since many people have existing Model classes that they
388 would like to use with Catalyst (or, conversely, they want to
389 write Catalyst models that can be used outside of Catalyst, e.g.
390 in a cron job), it's trivial to write a simple component in
391 Catalyst that slurps in an outside Model:
392
393     package MyApp::Model::DB;
394     use base qw/Catalyst::Model::DBIC::Schema/;
395     __PACKAGE__->config(
396         schema_class => 'Some::DBIC::Schema',
397         connect_info => ['dbi:SQLite:foo.db', '', '', {AutoCommit=>1}]
398     );
399     1;
400
401 and that's it! Now C<Some::DBIC::Schema> is part of your
402 Cat app as C<MyApp::Model::DB>.
403
404 Within Catalyst, the common approach to writing a model for your
405 application is wrapping a generic model (e.g. L<DBIx::Class::Schema>, a
406 bunch of XMLs, or anything really) with an object that contains
407 configuration data, convenience methods, and so forth. Thus you
408 will in effect have two models - a wrapper model that knows something
409 about Catalyst and your web application, and a generic model that is
410 totally independent of these needs.
411
412 Technically, within Catalyst a model is a B<component> - an instance of
413 the model's class belonging to the application. It is important to
414 stress that the lifetime of these objects is per application, not per
415 request.
416
417 While the model base class (L<Catalyst::Model>) provides things like
418 C<config> to better integrate the model into the application, sometimes
419 this is not enough, and the model requires access to C<$c> itself.
420
421 Situations where this need might arise include:
422
423 =over 4
424
425 =item *
426
427 Interacting with another model
428
429 =item *
430
431 Using per-request data to control behavior
432
433 =item *
434
435 Using plugins from a Model (for example L<Catalyst::Plugin::Cache>).
436
437 =back
438
439 From a style perspective it's usually considered bad form to make your
440 model "too smart" about things - it should worry about business logic
441 and leave the integration details to the controllers. If, however, you
442 find that it does not make sense at all to use an auxillary controller
443 around the model, and the model's need to access C<$c> cannot be
444 sidestepped, there exists a power tool called L</ACCEPT_CONTEXT>.
445
446 =head4 Controllers
447
448 Multiple controllers are a good way to separate logical domains of your
449 application.
450
451     package MyApp::Controller::Login;
452
453     use base qw/Catalyst::Controller/;
454
455     sub login : Path("login") { }
456     sub new_password : Path("new-password") { }
457     sub logout : Path("logout") { }
458
459     package MyApp::Controller::Catalog;
460
461     use base qw/Catalyst::Controller/;
462
463     sub view : Local { }
464     sub list : Local { }
465
466     package MyApp::Controller::Cart;
467
468     use base qw/Catalyst::Controller/;
469
470     sub add : Local { }
471     sub update : Local { }
472     sub order : Local { }
473
474 Note that you can also supply attributes via the Controller's config so
475 long as you have at least one attribute on a subref to be exported
476 (:Action is commonly used for this) - for example the following is
477 equivalent to the same controller above:
478
479     package MyApp::Controller::Login;
480
481     use base qw/Catalyst::Controller/;
482
483     __PACKAGE__->config(
484       actions => {
485         'sign_in' => { Path => 'sign-in' },
486         'new_password' => { Path => 'new-password' },
487         'sign_out' => { Path => 'sign-out' },
488       },
489     );
490
491     sub sign_in : Action { }
492     sub new_password : Action { }
493     sub sign_out : Action { }
494
495 =head3 ACCEPT_CONTEXT
496
497 Whenever you call $c->component("Foo") you get back an object - the
498 instance of the model. If the component supports the C<ACCEPT_CONTEXT>
499 method instead of returning the model itself, the return value of C<<
500 $model->ACCEPT_CONTEXT( $c ) >> will be used.
501
502 This means that whenever your model/view/controller needs to talk to C<$c> it
503 gets a chance to do this when it's needed.
504
505 A typical C<ACCEPT_CONTEXT> method will either clone the model and return one
506 with the context object set, or it will return a thin wrapper that contains
507 C<$c> and delegates to the per-application model object.
508
509 A typical C<ACCEPT_CONTEXT> method could look like this:
510
511     sub ACCEPT_CONTEXT {
512       my ( $self, $c, @extra_arguments ) = @_;
513       bless { %$self, c => $c }, ref($self);
514     }
515
516 effectively treating $self as a B<prototype object> that gets a new parameter.
517 C<@extra_arguments> comes from any trailing arguments to
518 C<< $c->component( $bah, @extra_arguments ) >> (or C<< $c->model(...) >>,
519 C<< $c->view(...) >> etc).
520
521 The life time of this value is B<per usage>, and not per request. To make this
522 per request you can use the following technique:
523
524 Add a field to C<$c>, like C<my_model_instance>. Then write your
525 C<ACCEPT_CONTEXT> method to look like this:
526
527     sub ACCEPT_CONTEXT {
528       my ( $self, $c ) = @_;
529
530       if ( my $per_request = $c->my_model_instance ) {
531         return $per_request;
532       } else {
533         my $new_instance = bless { %$self, c => $c }, ref($self);
534         Scalar::Util::weaken($new_instance->{c}); # or we have a circular reference
535         $c->my_model_instance( $new_instance );
536         return $new_instance;
537       }
538     }
539
540 =head3 Application Class
541
542 In addition to the Model, View, and Controller components, there's a
543 single class that represents your application itself. This is where you
544 configure your application, load plugins, and extend Catalyst.
545
546     package MyApp;
547
548     use strict;
549     use Catalyst qw/-Debug/; # Add other plugins here, e.g.
550                              # for session support
551
552     MyApp->config(
553         name => 'My Application',
554
555         # You can put anything else you want in here:
556         my_configuration_variable => 'something',
557     );
558     1;
559
560 In older versions of Catalyst, the application class was where you put
561 global actions. However, as of version 5.66, the recommended practice is
562 to place such actions in a special Root controller (see L</Actions>,
563 below), to avoid namespace collisions.
564
565 =over 4
566
567 =item * B<name>
568
569 The name of your application.
570
571 =back
572
573 Optionally, you can specify a B<root> parameter for templates and static
574 data.  If omitted, Catalyst will try to auto-detect the directory's
575 location. You can define as many parameters as you want for plugins or
576 whatever you need. You can access them anywhere in your application via
577 C<$context-E<gt>config-E<gt>{$param_name}>.
578
579 =head3 Context
580
581 Catalyst automatically blesses a Context object into your application
582 class and makes it available everywhere in your application. Use the
583 Context to directly interact with Catalyst and glue your L</Components>
584 together. For example, if you need to use the Context from within a
585 Template Toolkit template, it's already there:
586
587     <h1>Welcome to [% c.config.name %]!</h1>
588
589 As illustrated in our URL-to-Action dispatching example, the Context is
590 always the second method parameter, behind the Component object
591 reference or class name itself. Previously we called it C<$context> for
592 clarity, but most Catalyst developers just call it C<$c>:
593
594     sub hello : Global {
595         my ( $self, $c ) = @_;
596         $c->res->body('Hello World!');
597     }
598
599 The Context contains several important objects:
600
601 =over 4
602
603 =item * L<Catalyst::Request>
604
605     $c->request
606     $c->req # alias
607
608 The request object contains all kinds of request-specific information, like
609 query parameters, cookies, uploads, headers, and more.
610
611     $c->req->params->{foo};
612     $c->req->cookies->{sessionid};
613     $c->req->headers->content_type;
614     $c->req->base;
615     $c->req->uri_with( { page = $pager->next_page } );
616
617 =item * L<Catalyst::Response>
618
619     $c->response
620     $c->res # alias
621
622 The response is like the request, but contains just response-specific
623 information.
624
625     $c->res->body('Hello World');
626     $c->res->status(404);
627     $c->res->redirect('http://oook.de');
628
629 =item * L<Catalyst::Config>
630
631     $c->config
632     $c->config->root;
633     $c->config->name;
634
635 =item * L<Catalyst::Log>
636
637     $c->log
638     $c->log->debug('Something happened');
639     $c->log->info('Something you should know');
640
641 =item * B<Stash>
642
643     $c->stash
644     $c->stash->{foo} = 'bar';
645     $c->stash->{baz} = {baz => 'qox'};
646     $c->stash->{fred} = [qw/wilma pebbles/];
647
648 and so on.
649
650 =back
651
652 The last of these, the stash, is a universal hash for sharing data among
653 application components. For an example, we return to our 'hello' action:
654
655     sub hello : Global {
656         my ( $self, $c ) = @_;
657         $c->stash->{message} = 'Hello World!';
658         $c->forward('show_message');
659     }
660
661     sub show_message : Private {
662         my ( $self, $c ) = @_;
663         $c->res->body( $c->stash->{message} );
664     }
665
666 Note that the stash should be used only for passing data in an
667 individual request cycle; it gets cleared at a new request. If you need
668 to maintain persistent data, use a session. See
669 L<Catalyst::Plugin::Session> for a comprehensive set of
670 Catalyst-friendly session-handling tools.
671
672 =head3 Actions
673
674 A Catalyst controller is defined by its actions. An action is a
675 subroutine with a special attribute. You've already seen some examples
676 of actions in this document. The URL (for example
677 http://localhost.3000/foo/bar) consists of two parts, the base
678 (http://localhost:3000/ in this example) and the path (foo/bar).  Please
679 note that the trailing slash after the hostname[:port] always belongs to
680 base and not to the action.
681
682 =over 4
683
684 =item * B<Application Wide Actions>
685
686 Actions which are called at the root level of the application
687 (e.g. http://localhost:3000/ ) go in MyApp::Controller::Root, like
688 this:
689
690     package MyApp::Controller::Root;
691     use base 'Catalyst::Controller';
692     # Sets the actions in this controller to be registered with no prefix
693     # so they function identically to actions created in MyApp.pm
694     __PACKAGE__->config->{namespace} = '';
695     sub default : Private {
696         my ( $self, $context ) = @_;
697         $context->response->body('Catalyst rocks!');
698     }
699     1;
700
701 =back
702
703 =head4 Action types
704
705 Catalyst supports several types of actions:
706
707 =over 4
708
709 =item * B<Literal> (B<Path> actions)
710
711     package MyApp::Controller::My::Controller;
712     sub bar : Path('foo/bar') { }
713
714 Literal C<Path> actions will act relative to their current
715 namespace. The above example matches only
716 http://localhost:3000/my/controller/foo/bar. If you start your path with
717 a forward slash, it will match from the root. Example:
718
719     package MyApp::Controller::My::Controller;
720     sub bar : Path('/foo/bar') { }
721
722 Matches only http://localhost:3000/foo/bar.
723
724     package MyApp::Controller::My::Controller;
725     sub bar : Path { }
726
727 By leaving the C<Path> definition empty, it will match on the namespace
728 root. The above code matches http://localhost:3000/my/controller.
729
730 =item * B<Regex>
731
732     sub bar : Regex('^item(\d+)/order(\d+)$') { }
733
734 Matches any URL that matches the pattern in the action key, e.g.
735 http://localhost:3000/item23/order42. The '' around the regexp is
736 optional, but perltidy likes it. :)
737
738 Regex matches act globally, i.e. without reference to the namespace from
739 which it is called, so that a C<bar> method in the
740 C<MyApp::Controller::Catalog::Order::Process> namespace won't match any
741 form of C<bar>, C<Catalog>, C<Order>, or C<Process> unless you
742 explicitly put this in the regex. To achieve the above, you should
743 consider using a C<LocalRegex> action.
744
745 =item * B<LocalRegex>
746
747     sub bar : LocalRegex('^widget(\d+)$') { }
748
749 LocalRegex actions act locally. If you were to use C<bar> in
750 C<MyApp::Controller::Catalog>, the above example would match urls like
751 http://localhost:3000/catalog/widget23.
752
753 If you omit the "C<^>" from your regex, then it will match any depth
754 from the controller and not immediately off of the controller name. The
755 following example differs from the above code in that it will match
756 http://localhost:3000/catalog/foo/widget23 as well.
757
758     package MyApp::Controller::Catalog;
759     sub bar : LocalRegex('widget(\d+)$') { }
760
761 For both LocalRegex and Regex actions, if you use capturing parentheses
762 to extract values within the matching URL, those values are available in
763 the C<$c-E<gt>req-E<gt>captures> array. In the above example, "widget23"
764 would capture "23" in the above example, and
765 C<$c-E<gt>req-E<gt>captures-E<gt>[0]> would be "23". If you want to pass
766 arguments at the end of your URL, you must use regex action keys. See
767 L</URL Path Handling> below.
768
769 =item * B<Top-level> (B<Global>)
770
771     package MyApp::Controller::Foo;
772     sub foo : Global { }
773
774 Matches http://localhost:3000/foo. The function name is mapped
775 directly to the application base.  You can provide an equivalent
776 function in this case  by doing the following:
777
778     package MyApp::Controller::Root
779     sub foo : Local { }
780
781 =item * B<Namespace-Prefixed> (B<Local>)
782
783     package MyApp::Controller::My::Controller; 
784     sub foo : Local { }
785
786 Matches http://localhost:3000/my/controller/foo. 
787
788 This action type indicates that the matching URL must be prefixed with a
789 modified form of the component's class (package) name. This modified
790 class name excludes the parts that have a pre-defined meaning in
791 Catalyst ("MyApp::Controller" in the above example), replaces "::" with
792 "/", and converts the name to lower case.  See L</Components> for a full
793 explanation of the pre-defined meaning of Catalyst component class
794 names.
795
796 =item * B<Chained>
797
798 Catalyst also provides a method to build and dispatch chains of actions,
799 like
800
801     sub catalog : Chained : CaptureArgs(1) {
802         my ( $self, $c, $arg ) = @_;
803         ...
804     }
805
806     sub item : Chained('catalog') : Args(1) {
807         my ( $self, $c, $arg ) = @_;
808         ...
809     }
810
811 to handle a C</catalog/*/item/*> path. For further information about this
812 dispatch type, please see L<Catalyst::DispatchType::Chained>.
813
814 =item * B<Private>
815
816     sub foo : Private { }
817
818 Matches no URL, and cannot be executed by requesting a URL that
819 corresponds to the action key. Private actions can be executed only
820 inside a Catalyst application, by calling the C<forward> method:
821
822     $c->forward('foo');
823
824 See L</Flow Control> for a full explanation of C<forward>. Note that, as
825 discussed there, when forwarding from another component, you must use
826 the absolute path to the method, so that a private C<bar> method in your
827 C<MyApp::Controller::Catalog::Order::Process> controller must, if called
828 from elsewhere, be reached with
829 C<$c-E<gt>forward('/catalog/order/process/bar')>.
830
831 =item * B<Args>
832
833 Args is not an action type per se, but an action modifier - it adds a
834 match restriction to any action it's provided to, requiring only as many
835 path parts as are specified for the action to be valid - for example in
836 MyApp::Controller::Foo,
837
838   sub bar :Local
839
840 would match any URL starting /foo/bar/. To restrict this you can do
841
842   sub bar :Local :Args(1)
843
844 to only match /foo/bar/*/
845
846 =back
847
848 B<Note:> After seeing these examples, you probably wonder what the point
849 is of defining names for regex and path actions. Every public action is
850 also a private one, so you have one unified way of addressing components
851 in your C<forward>s.
852
853 =head4 Built-in Private Actions
854
855 In response to specific application states, Catalyst will automatically
856 call these built-in private actions in your application class:
857
858 =over 4
859
860 =item * B<default : Private>
861
862 Called when no other action matches. Could be used, for example, for
863 displaying a generic frontpage for the main app, or an error page for
864 individual controllers.
865
866 If C<default> isn't acting how you would expect, look at using a
867 L</Literal> C<Path> action (with an empty path string). The difference
868 is that C<Path> takes arguments relative from the namespace and
869 C<default> I<always> takes arguments relative from the root, regardless
870 of what controller it's in. Indeed, this is now the recommended way of
871 handling default situations; the C<default> private controller should
872 be considered deprecated.
873
874 =item * B<index : Private>
875
876 C<index> is much like C<default> except that it takes no arguments
877 and it is weighted slightly higher in the matching process. It is
878 useful as a static entry point to a controller, e.g. to have a static
879 welcome page. Note that it's also weighted higher than Path.
880
881 =item * B<begin : Private>
882
883 Called at the beginning of a request, before any matching actions are
884 called.
885
886 =item * B<end : Private>
887
888 Called at the end of a request, after all matching actions are called.
889
890 =back
891
892 =head4 Built-in actions in controllers/autochaining
893
894     Package MyApp::Controller::Foo;
895     sub begin : Private { }
896     sub default : Private { }
897     sub auto : Private { }
898
899 You can define built-in private actions within your controllers as
900 well. The actions will override the ones in less-specific controllers,
901 or your application class. In other words, for each of the three
902 built-in private actions, only one will be run in any request
903 cycle. Thus, if C<MyApp::Controller::Catalog::begin> exists, it will be
904 run in place of C<MyApp::begin> if you're in the C<catalog> namespace,
905 and C<MyApp::Controller::Catalog::Order::begin> would override this in
906 turn.
907
908 =over 4
909
910 =item * B<auto : Private>
911
912 In addition to the normal built-in actions, you have a special action
913 for making chains, C<auto>. Such C<auto> actions will be run after any
914 C<begin>, but before your action is processed. Unlike the other
915 built-ins, C<auto> actions I<do not> override each other; they will be
916 called in turn, starting with the application class and going through to
917 the I<most> specific class. I<This is the reverse of the order in which
918 the normal built-ins override each other>.
919
920 =back
921
922 Here are some examples of the order in which the various built-ins
923 would be called:
924
925 =over 4
926
927 =item for a request for C</foo/foo>
928
929   MyApp::begin
930   MyApp::auto
931   MyApp::Controller::Foo::default # in the absence of MyApp::Controller::Foo::Foo
932   MyApp::end
933
934 =item for a request for C</foo/bar/foo>
935
936   MyApp::Controller::Foo::Bar::begin
937   MyApp::auto
938   MyApp::Controller::Foo::auto
939   MyApp::Controller::Foo::Bar::auto
940   MyApp::Controller::Foo::Bar::default # for MyApp::Controller::Foo::Bar::foo
941   MyApp::Controller::Foo::Bar::end
942
943 =back
944
945 The C<auto> action is also distinguished by the fact that you can break
946 out of the processing chain by returning 0. If an C<auto> action returns
947 0, any remaining actions will be skipped, except for C<end>. So, for the
948 request above, if the first auto returns false, the chain would look
949 like this:
950
951 =over 4
952
953 =item for a request for C</foo/bar/foo> where first C<auto> returns
954 false
955
956   MyApp::Controller::Foo::Bar::begin
957   MyApp::auto
958   MyApp::Controller::Foo::Bar::end
959
960 =back
961
962 An example of why one might use this is an authentication action: you
963 could set up a C<auto> action to handle authentication in your
964 application class (which will always be called first), and if
965 authentication fails, returning 0 would skip any remaining methods
966 for that URL.
967
968 B<Note:> Looking at it another way, C<auto> actions have to return a
969 true value to continue processing! You can also C<die> in the auto
970 action; in that case, the request will go straight to the finalize
971 stage, without processing further actions.
972
973 =head4 URL Path Handling
974
975 You can pass variable arguments as part of the URL path, separated with 
976 forward slashes (/). If the action is a Regex or LocalRegex, the '$' anchor 
977 must be used. For example, suppose you want to handle C</foo/$bar/$baz>, 
978 where C<$bar> and C<$baz> may vary:
979
980     sub foo : Regex('^foo$') { my ($self, $context, $bar, $baz) = @_; }
981
982 But what if you also defined actions for C</foo/boo> and C</foo/boo/hoo>?
983
984     sub boo : Path('foo/boo') { .. }
985     sub hoo : Path('foo/boo/hoo') { .. }
986
987 Catalyst matches actions in most specific to least specific order:
988
989     /foo/boo/hoo
990     /foo/boo
991     /foo # might be /foo/bar/baz but won't be /foo/boo/hoo
992
993 So Catalyst would never mistakenly dispatch the first two URLs to the
994 '^foo$' action.
995
996 If a Regex or LocalRegex action doesn't use the '$' anchor, the action will 
997 still match a URL containing arguments, however the arguments won't be 
998 available via C<@_>.
999
1000 =head4 Parameter Processing
1001
1002 Parameters passed in the URL query string are handled with methods in
1003 the L<Catalyst::Request> class. The C<param> method is functionally
1004 equivalent to the C<param> method of C<CGI.pm> and can be used in
1005 modules that require this.
1006
1007     # http://localhost:3000/catalog/view/?category=hardware&page=3
1008     my $category = $c->req->param('category');
1009     my $current_page = $c->req->param('page') || 1;
1010
1011     # multiple values for single parameter name
1012     my @values = $c->req->param('scrolling_list');          
1013
1014     # DFV requires a CGI.pm-like input hash
1015     my $results = Data::FormValidator->check($c->req->params, \%dfv_profile);
1016
1017 =head3 Flow Control
1018
1019 You control the application flow with the C<forward> method, which
1020 accepts the key of an action to execute. This can be an action in the
1021 same or another Catalyst controller, or a Class name, optionally
1022 followed by a method name. After a C<forward>, the control flow will
1023 return to the method from which the C<forward> was issued.
1024
1025 A C<forward> is similar to a method call. The main differences are that
1026 it wraps the call in an C<eval> to allow exception handling; it
1027 automatically passes along the context object (C<$c> or C<$context>);
1028 and it allows profiling of each call (displayed in the log with
1029 debugging enabled).
1030
1031     sub hello : Global {
1032         my ( $self, $c ) = @_;
1033         $c->stash->{message} = 'Hello World!';
1034         $c->forward('check_message'); # $c is automatically included
1035     }
1036
1037     sub check_message : Private {
1038         my ( $self, $c ) = @_;
1039         return unless $c->stash->{message};
1040         $c->forward('show_message');
1041     }
1042
1043     sub show_message : Private {
1044         my ( $self, $c ) = @_;
1045         $c->res->body( $c->stash->{message} );
1046     }
1047
1048 A C<forward> does not create a new request, so your request object
1049 (C<$c-E<gt>req>) will remain unchanged. This is a key difference between
1050 using C<forward> and issuing a redirect.
1051
1052 You can pass new arguments to a C<forward> by adding them
1053 in an anonymous array. In this case C<$c-E<gt>req-E<gt>args>
1054 will be changed for the duration of the C<forward> only; upon
1055 return, the original value of C<$c-E<gt>req-E<gt>args> will
1056 be reset.
1057
1058     sub hello : Global {
1059         my ( $self, $c ) = @_;
1060         $c->stash->{message} = 'Hello World!';
1061         $c->forward('check_message',[qw/test1/]);
1062         # now $c->req->args is back to what it was before
1063     }
1064
1065     sub check_message : Private {
1066         my ( $self, $c ) = @_;
1067         my $first_argument = $c->req->args->[0]; # now = 'test1'
1068         # do something...
1069     }
1070
1071 As you can see from these examples, you can just use the method name as
1072 long as you are referring to methods in the same controller. If you want
1073 to forward to a method in another controller, or the main application,
1074 you will have to refer to the method by absolute path.
1075
1076   $c->forward('/my/controller/action');
1077   $c->forward('/default'); # calls default in main application
1078
1079 Here are some examples of how to forward to classes and methods.
1080
1081     sub hello : Global {
1082         my ( $self, $c ) = @_;
1083         $c->forward(qw/MyApp::Model::Hello say_hello/);
1084     }
1085
1086     sub bye : Global {
1087         my ( $self, $c ) = @_;
1088         $c->forward('MyApp::Model::Hello'); # no method: will try 'process'
1089     }
1090
1091     package MyApp::Model::Hello;
1092
1093     sub say_hello {
1094         my ( $self, $c ) = @_;
1095         $c->res->body('Hello World!');
1096     }
1097
1098     sub process {
1099         my ( $self, $c ) = @_;
1100         $c->res->body('Goodbye World!');
1101     }
1102
1103 Note that C<forward> returns to the calling action and continues
1104 processing after the action finishes. If you want all further processing
1105 in the calling action to stop, use C<detach> instead, which will execute
1106 the C<detach>ed action and not return to the calling sub. In both cases,
1107 Catalyst will automatically try to call process() if you omit the
1108 method.
1109
1110
1111 =head3 Testing
1112
1113 Catalyst has a built-in http server for testing or local
1114 deployment. (Later, you can easily use a more powerful server, for
1115 example Apache/mod_perl or FastCGI, in a production environment.)
1116
1117 Start your application on the command line...
1118
1119     script/myapp_server.pl
1120
1121 ...then visit http://localhost:3000/ in a browser to view the output.
1122
1123 You can also do it all from the command line:
1124
1125     script/myapp_test.pl http://localhost/
1126
1127 Catalyst has a number of tools for actual regression testing of
1128 applications. The helper scripts will automatically generate basic tests
1129 that can be extended as you develop your project. To write your own
1130 comprehensive test scripts, L<Test::WWW::Mechanize::Catalyst> is an
1131 invaluable tool.
1132
1133 For more testing ideas, see L<Catalyst::Manual::Tutorial::Testing>.
1134
1135 Have fun!
1136
1137 =head1 SEE ALSO
1138
1139 =over 4
1140
1141 =item * L<Catalyst::Manual::About>
1142
1143 =item * L<Catalyst::Manual::Tutorial>
1144
1145 =item * L<Catalyst>
1146
1147 =back
1148
1149 =head1 SUPPORT
1150
1151 IRC:
1152
1153     Join #catalyst on irc.perl.org.
1154     Join #catalyst-dev on irc.perl.org to help with development.
1155
1156 Mailing lists:
1157
1158     http://lists.rawmode.org/mailman/listinfo/catalyst
1159     http://lists.rawmode.org/mailman/listinfo/catalyst-dev
1160
1161 =head1 AUTHOR
1162
1163 Sebastian Riedel, C<sri@oook.de> 
1164 David Naughton, C<naughton@umn.edu>
1165 Marcus Ramberg, C<mramberg@cpan.org>
1166 Jesse Sheidlower, C<jester@panix.com>
1167 Danijel Milicevic, C<me@danijel.de>
1168 Kieren Diment, C<kd@totaldatasolution.com>
1169 Yuval Kogman, C<nothingmuch@woobling.org>
1170
1171 =head1 COPYRIGHT
1172
1173 This program is free software. You can redistribute it and/or modify it
1174 under the same terms as Perl itself.