light docs work (Intro awaits signficant rearranging)
Matt S Trout [Thu, 8 Jun 2006 14:38:42 +0000 (14:38 +0000)]
r9840@cain (orig r4321):  jester | 2006-06-08 02:56:45 +0000

lib/Catalyst/Manual/Intro.pod

index b6823ef..b0429ef 100644 (file)
@@ -8,12 +8,22 @@ This is a brief introduction to Catalyst. It explains the most important
 features of how Catalyst works and shows how to get a simple application
 up and running quickly. For an introduction (without code) to Catalyst
 itself, and why you should be using it, see L<Catalyst::Manual::About>.
+For a systematic step-by-step introduction to writing an application
+with Catalyst, see L<Catalyst::Manual::Tutorial>.
 
 =head2 What is Catalyst?
 
 Catalyst is an elegant web application framework, extremely flexible yet
 extremely simple. It's similar to Ruby on Rails, Spring (Java), and
-L<Maypole>, upon which it was originally based.
+L<Maypole>, upon which it was originally based. Its most important
+design philosphy is to provide easy access to all the tools you need to
+develop web applications, with few restrictions on how you need to use
+these tools. Under Catalyst, it is always possible to do things in a
+different way. However, this does mean that it is always possible to do
+things in a different way. Other web frameworks are simpler to use and
+easy to get up and running, but achieve this by locking the programmer
+into a single set of tools. Catalyst's emphasis on flexibility means
+that you have to think more to use it. We view this as a feature.
 
 =head3 MVC
 
@@ -32,7 +42,7 @@ well-known Perl modules you may want to use for each.
 =item * B<Model>
 
 Access and modify content (data). L<DBIx::Class>, L<Class::DBI>,
-L<Plucene>, L<Net::LDAP>...
+L<Xapian>, L<Net::LDAP>...
 
 =item * B<View>
 
@@ -199,6 +209,11 @@ configure your application, load plugins, and extend Catalyst.
     );
     1;
 
+In older versions of Catalyst, the application class was where you put
+global actions. However, as of version 5.66, the recommended practice is
+to place such actions in a special Root controller (see #####, below),
+to avoid namespace collisions.
+
 =over 4
 
 =item * B<name>
@@ -213,6 +228,8 @@ 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-E<gt>config-E<gt>{$param_name}>.
 
+###### We need a short section on configuration here.
+
 =head3 Context
 
 Catalyst automatically blesses a Context object into your application
@@ -305,8 +322,6 @@ to maintain more persistent data, use a session.
 
 =head3 Actions
 
-
-
 A Catalyst controller is defined by its actions. An action is a
 subroutine with a special attribute. You've already seen some examples
 of actions in this document. The URL (for example
@@ -320,7 +335,7 @@ base and not to the action.
 =item * B<Application Wide Actions>
 
 Actions which are called at the root level of the application
-(e.g. http:///localhost:3000/ ) go in MyApp::Controller::Root, like
+(e.g. http://localhost:3000/ ) go in MyApp::Controller::Root, like
 this:
 
     package MyApp::Controller::Root;
@@ -659,10 +674,9 @@ debugging enabled).
         $c->res->body( $c->stash->{message} );
     }
 
-A C<forward> does not create a new request, so your request
-object (C<$c-E<gt>req>) will remain unchanged. This is a
-key difference between using C<forward> and issuing a
-redirect.
+A C<forward> does not create a new request, so your request object
+(C<$c-E<gt>req>) will remain unchanged. This is a key difference between
+using C<forward> and issuing a redirect.
 
 You can pass new arguments to a C<forward> by adding them
 in an anonymous array. In this case C<$c-E<gt>req-E<gt>args>
@@ -744,7 +758,7 @@ You don't have to C<use> or otherwise register Models, Views, and
 Controllers.  Catalyst automatically discovers and instantiates them
 when you call C<setup> in the main application. All you need to do is
 put them in directories named for each Component type. Notice that you
-can use some very terse aliases for each one.
+can use a terse alias for each one.
 
 =over 4
 
@@ -762,6 +776,11 @@ can use some very terse aliases for each one.
 
 =back
 
+In older versions of Catalyst, the recommended practice (and the one
+automatically created by helper scripts) was to name the directories
+C<M/>, C<V/>, and C<C/>. Though these still work, we now recommend
+the use of the full names.
+
 =head4 Views
 
 To show how to define views, we'll use an already-existing base class for the
@@ -988,21 +1007,22 @@ Using plugins in (for example L<Catalyst::Plugin::Cache>).
 
 =back
 
-From a style perspective usually it's bad to make your model "too smart" about
-things - it should worry about business logic and leave the integration details
-to the controllers. If, however, you find that it does not make sense at all to
-use an auxillary controller around the model, and the model's need to access
-C<$c> cannot be sidestepped, there exists a power tool called C<ACCEPT_CONTEXT>.
+From a style perspective usually it's bad to make your model "too smart"
+about things - it should worry about business logic and leave the
+integration details to the controllers. If, however, you find that it
+does not make sense at all to use an auxillary controller around the
+model, and the model's need to access C<$c> cannot be sidestepped, there
+exists a power tool called C<ACCEPT_CONTEXT>.
 
 #### editor note: this part is "generic" - it also applies to views and
 #### controllers.
 
 =head3 ACCEPT_CONTEXT
 
-Whenever you call $c->component("Foo") you get back an object - the instance of
-the model. If the component supports the C<ACCEPT_CONTEXT> method instead of
-returning the model itself, the return value of
-C<< $model->ACCEPT_CONTEXT( $c ) >> will be used.
+Whenever you call $c->component("Foo") you get back an object - the
+instance of the model. If the component supports the C<ACCEPT_CONTEXT>
+method instead of returning the model itself, the return value of C<<
+$model->ACCEPT_CONTEXT( $c ) >> will be used.
 
 This means that whenever your model/view/controller needs to talk to C<$c> it
 gets a chance to do this when it's needed.
@@ -1011,7 +1031,7 @@ A typical C<ACCEPT_CONTEXT> method will either clone the model and return one
 with the context object set, or it will return a thin wrapper that contains
 C<$c> and delegates to the per-application model object.
 
-A typicall C<ACCEPT_CONTEXT> method could look like this:
+A typical C<ACCEPT_CONTEXT> method could look like this:
 
        sub ACCEPT_CONTEXT {
                my ( $self, $c, @extra_arguments ) = @_;
@@ -1043,12 +1063,11 @@ C<ACCEPT_CONTEXT> method to look like this:
        }
 
 
-
 =head3 Testing
 
-Catalyst has a built-in http server for testing! (Later, you can easily
-use a more powerful server, e.g. Apache/mod_perl, in a production
-environment.)
+Catalyst has a built-in http server for testing. (Later, you can easily
+use a more powerful server, e.g. Apache/mod_perl or FastCGI, in a
+production environment.)
 
 Start your application on the command line...