Changes # Record of application changes
lib # Lib directory for your app's Perl modules
Hello # Application main code directory
- Controller # Directory for Controller modules
+ Controller # Directory for Controller modules
Model # Directory for Models
View # Directory for Views
Hello.pm # Base application module
hello_server.pl # The normal development server
hello_test.pl # Test your app from the command line
t # Directory for tests
- 01app.t # Test scaffold
- 02pod.t
- 03podcoverage.t
+ 01app.t # Test scaffold
+ 02pod.t
+ 03podcoverage.t
Catalyst will "auto-discover" modules in the Controller, Model, and View
.----------------------------------------------------------------------------.
| Catalyst::Plugin::ConfigLoader 0.30 |
'----------------------------------------------------------------------------'
-
+
[debug] Loaded dispatcher "Catalyst::Dispatcher"
[debug] Loaded engine "Catalyst::Engine"
- [debug] Found home "/root/Hello"
- [debug] Loaded Config "/root/Hello/hello.conf"
+ [debug] Found home "/home/catalyst/Hello"
+ [debug] Loaded Config "/home/catalyst/Hello/hello.conf"
[debug] Loaded components:
.-----------------------------------------------------------------+----------.
| Class | Type |
+-----------------------------------------------------------------+----------+
| Hello::Controller::Root | instance |
'-----------------------------------------------------------------+----------'
-
+
[debug] Loaded Private actions:
.----------------------+--------------------------------------+--------------.
| Private | Class | Method |
| /end | Hello::Controller::Root | end |
| /index | Hello::Controller::Root | index |
'----------------------+--------------------------------------+--------------'
-
+
[debug] Loaded Path actions:
.-------------------------------------+--------------------------------------.
| Path | Private |
| / | /index |
| / | /default |
'-------------------------------------+--------------------------------------'
-
+
[info] Hello powered by Catalyst 5.90002
HTTP::Server::PSGI: Accepting connections at http://0:3000/
sub index :Path :Args(0) {
my ( $self, $c ) = @_;
-
+
# Hello World
$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::Runtime>, L<Catalyst::Response>, and
L<Catalyst::Request>)
-C<$c-E<gt>response-E<gt>body> sets the HTTP response (see
+C<< $c->response->body >> sets the HTTP response (see
L<Catalyst::Response>), while
-C<$c-E<gt>welcome_message> is a special method that returns the welcome
+C<< $c->welcome_message >> is a special method that returns the welcome
message that you saw in your browser.
The ":Path :Args(0)" after the method name are attributes which
method.
While you leave the C<script/hello_server.pl -r> command running the
-development server in one window (don't forget the "-r" on the end!),
+development server in one window (don't forget the "-r" at the end!),
open another window and add the following subroutine to your
C<lib/Hello/Controller/Root.pm> file:
sub hello :Global {
my ( $self, $c ) = @_;
-
+
$c->response->body("Hello, World!");
}
get output similar to the following:
Saw changes to the following files:
- - /root/Hello/lib/Hello/Controller/Root.pm (modify)
-
+ - /home/catalyst/Hello/lib/Hello/Controller/Root.pm (modify)
+
Attempting to restart the server
...
[debug] Loaded Private actions:
In the Catalyst world a "View" itself is not a page of XHTML or a
template designed to present a page to a browser. Rather, it is the
-module that determines the I<type> of view -- HTML, pdf, XML, etc. For
+module that determines the I<type> of view -- HTML, PDF, XML, etc. For
the thing that generates the I<content> of that view (such as a
-Toolkit Template template file), the actual templates go under the
+Template Toolkit template file), the actual templates go under the
"root" directory.
To create a TT view, run:
=item *
The final "TT" tells Catalyst the I<type> of the view, with "TT"
-indicating that you want to a Template Toolkit view.
+indicating that you want to use a Template Toolkit view.
=back
able to use it to display the view templates using the "process" method
that it inherits from the C<Catalyst::View::TT> class.
-Template Toolkit is a very full featured template facility, with
+Template Toolkit is a very full-featured template facility, with
excellent documentation at 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 chapters of the
sub hello :Global {
my ( $self, $c ) = @_;
-
+
$c->stash(template => 'hello.tt');
}
-This time, instead of doing C<$c-E<gt>response-E<gt>body()>, you are
+This time, instead of doing C<< $c->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 request cycle. 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-E<gt>response- E<gt>body()>
+view to be rendered (unless there's a C<< $c->response->body() >>
statement). So your template will be magically displayed at the end of
your method.
After saving the file, the development server should automatically
restart (again, the tutorial is written to assume that you are using the
"-r" option -- manually restart it if you aren't), and look at
-L<http://localhost:3000/hello> in your again. You should see the
-template that you just made.
+L<http://localhost:3000/hello> in your web browser again. You should see
+the template that you just created.
B<TIP:> If you keep the server running with "-r" in a "background
-window," don't let that window get totally hidden... if you have an
+window," don't let that window get totally hidden... if you have a
syntax error in your code, the debug server output will contain the
error information.
used previous is becoming more common because it allows you to
set multiple stash variables in one line. For example:
- $c->stash(template => 'hello.tt', foo => 'bar',
+ $c->stash(template => 'hello.tt', foo => 'bar',
another_thing => 1);
You can also set multiple stash values with a hashref:
- $c->stash({template => 'hello.tt', foo => 'bar',
+ $c->stash({template => 'hello.tt', foo => 'bar',
another_thing => 1});
-Any of these formats work, but the C<$c-E<gt>stash(name =E<gt> value);>
+Any of these formats work, but the C<< $c->stash(name => value); >>
style is growing in popularity -- you may wish to use it all the time
(even when you are only setting a single value).
$ script/hello_create.pl controller Site
This will create a C<lib/Hello/Controller/Site.pm> file (and a test
-file). Bring Site.pm up in your editor, and you can see that there's not
-much there.
+file). If you bring Site.pm up in your editor, you can see that
+there's not much there to see.
In C<lib/Hello/Controller/Site.pm>, add the following method:
sub test :Local {
my ( $self, $c ) = @_;
-
+
$c->stash(username => 'John',
template => 'site/test.tt');
}
$ mkdir root/site
-Create a new template file in that direction named C<root/site/test.tt>
+Create a new template file in that directory named C<root/site/test.tt>
and include a line like:
<p>Hello, [% username %]!</p>
Feel free to contact the author for any errors or suggestions, but the
best way to report issues is via the CPAN RT Bug system at
-<https://rt.cpan.org/Public/Dist/Display.html?Name=Catalyst-Manual>.
-
-The most recent version of the Catalyst Tutorial can be found at
-L<http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-Manual/5.80/trunk/lib/Catalyst/Manual/Tutorial/>.
+L<https://rt.cpan.org/Public/Dist/Display.html?Name=Catalyst-Manual>.
-Copyright 2006-2010, Kennedy Clark, under the
+Copyright 2006-2011, Kennedy Clark, under the
Creative Commons Attribution Share-Alike License Version 3.0
(L<http://creativecommons.org/licenses/by-sa/3.0/us/>).