application. Given that many other documents cover this subject in
detail, MVC will not be discussed in depth here (for an excellent
introduction to MVC and general Catalyst concepts, please see
-L<Catalyst::Manual::About>. In short:
+L<Catalyst::Manual::About|Catalyst::Manual::About>. In short:
=over 4
You can checkout the source code for this example from the catalyst
subversion repository as per the instructions in
-L<Catalyst::Manual::Tutorial::Intro>
+L<Catalyst::Manual::Tutorial::Intro|Catalyst::Manual::Tutorial::Intro>
=head1 CREATE A CATALYST PROJECT
View # Directory for Views
Hello.pm # Base application module
Makefile.PL # Makefile to build application
- hello.yml # Application configuration file
+ hello.conf # Application configuration file
README # README file
root # Equiv of htdocs, dir for templates, css, javascript
favicon.ico
[debug] Loaded dispatcher "Catalyst::Dispatcher"
[debug] Loaded engine "Catalyst::Engine::HTTP"
[debug] Found home "/home/me/Hello"
- [debug] Loaded Config "/home/me/Hello/hello.yml"
+ [debug] Loaded Config "/home/me/Hello/hello.conf"
[debug] Loaded components:
.-----------------------------------------------------------------+----------.
| Class | Type |
your browser. Later on you'll want to change that to something more
reasonable, such as a "404" message but for now just leave it alone.
- sub default : Path : Args {
+ sub default :Path :Args {
my ( $self, $c ) = @_;
-
+
$c->response->body( $c->welcome_message );
}
The "C<$c>" here refers to the Catalyst context, which is used to
access the Catalyst application. In addition to many other things,
the Catalyst context provides access to "response" and "request"
-objects. (See L<Catalyst>, L<Catalyst::Response>, and L<Catalyst::Request>)
+objects. (See L<Catalyst|Catalyst>,
+L<Catalyst::Response|Catalyst::Response>, and
+L<Catalyst::Request|Catalyst::Request>)
-C<$c->response->body> sets the HTTP response (see
-L<Catalyst::Response>), while C<$c->welcome_message> is a special method
-that returns the welcome message that you saw in your browser.
+C<$c-E<gt>response-E<gt>body> sets the HTTP response (see
+L<Catalyst::Response|Catalyst::Response>), while C<$c-E<gt>welcome_message>
+is a special method that returns the welcome message that you saw in
+your browser.
-The ": Path : Args" after the method name are attributes which determine
+The ":Path :Args" after the method name are attributes which determine
which URLs will be dispatched to this method. (Depending on your version of
Catalyst, it used to say "Private" but using that with default is
currently deprecated.)
method.
-Add the following subroutine to your Root.pm file:
+Add the following subroutine to your C<lib/Hello/Controller/Root.pm>
+file:
sub hello : Global {
my ( $self, $c ) = @_;
+
$c->response->body("Hello, World!");
}
Here you're sending your own string to the webpage.
Save the file, start the server (stop and restart it if it's still
-up), and go to L<http://localhost:3000/hello|http://localhost:3000> to
+up), and go to L<http://localhost:3000/hello> to
see "Hello, World!"
=head2 Hello, World! Using a View and a Template
This creates the C<lib/Hello/View/TT.pm> module, which is a subclass of
C<Catalyst::View::TT>. The "view" keyword tells the create script that
-you are creating a view, the first "TT" tells it that you are creating
-a Template Toolkit view, and the second "TT" tells the script to name
+you are creating a view, the second "TT" tells it that you are creating
+a Template Toolkit view, and the first "TT" tells the script to name
the View module "TT.pm", which is a commonly used name for TT views.
(You can name it anything you want, such as "HTML.pm".) If you look at
TT.pm, you will find that it only contains a config statement to set
Template Toolkit is a very full featured template facility, with
excellent documentation at
-L<http://template-tookit.org/|http://template-tookit.org/>,
+L<http://template-toolkit.org/>,
but since this is not a TT tutorial, we'll stick to only basic TT
usage here (and explore some of the more common TT features in later
parts of the tutorial).
[% META title = 'Hello, World!' %]
<p>
- This is a TT view template, located in the root directory.
+ This is a TT view template, located in the 'root/' directory.
</p>
[% and %] are markers for the TT parts of the template. Inside you can
access Perl variables and classes, and use TT directives. The rest of
-the template is normal HTML. Change the hello method in Root.pm to the
-following:
+the template is normal HTML. Change the hello method in
+C<lib/Hello/Controller/Root.pm> to the following:
sub hello : Global {
my ( $self, $c ) = @_;
+
$c->stash->{template} = 'hello.tt';
}
-This time, instead of doing C<$c->response->body()>, you are setting
+This time, instead of doing C<$c-E<gt>response->body()>, you are setting
the value of the "template" hash key in the Catalyst "stash", an area
for putting information to share with other parts of your application.
The "template" key determines which template will be displayed at the
end of the method. Catalyst controllers have a default "end" action
for all methods which causes the first (or default) view to be
-rendered (unless there's a C<$c->response->body()> statement). So your
+rendered (unless there's a C<$c-E<gt>response->body()> statement). So your
template will be magically displayed at the end of your method.
After saving the file, restart the development server, and look at
-L<http://localhost:3000/hello|http://localhost:3000> again. You should
+L<http://localhost:3000/hello> again. You should
see the template that you just made.
not much there. Most people probably don't bother to use the create
script to make controllers after they're used to using Catalyst.
-In Site.pm, add the following method:
+In C<lib/Hello/Controller/Site.pm>, add the following method:
sub test : Local {
my ( $self, $c ) = @_;
+
$c->stash->{username} = "John";
$c->stash->{template} = 'site/test.tt';
}
for use in the template.
Make a subdirectory "site" in the "root" directory. Copy the hello.tt
-file into the directory as root/site/test.tt, or create a new template
-file at that location. Include a line like:
+file into the directory as C<root/site/test.tt>, or create a new
+template file at that location. Include a line like:
- <p>Hello, [% username %]!</p>
+ <p>Hello, [% username %]!</p>
Bring up or restart the server. Notice in the server output that
C</site/test> is listed in the Loaded Path actions. Go to
-L<http://localhost:3000/site/test|http://localhosst:3000/site/test>
+L<http://localhost:3000/site/test>
You should see your test.tt file displayed, including the name "John"
that you set in the controller.
most recent version of the Catalyst Tutorial can be found at
L<http://dev.catalyst.perl.org/repos/Catalyst/trunk/Catalyst-Manual/lib/Catalyst/Manual/Tutorial/>.
-Copyright 2006, Kennedy Clark & Gerda Shank, under Creative Commons License
+Copyright 2006-2008, Kennedy Clark & Gerda Shank, under Creative Commons License
(L<http://creativecommons.org/licenses/by-nc-sa/2.5/>).