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|Catalyst::Manual::About>). In short:
+L<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::01_Intro|Catalyst::Manual::Tutorial::01_Intro>.
+L<Catalyst::Manual::Tutorial::01_Intro>.
=head1 CREATE A CATALYST PROJECT
Catalyst provides a number of helper scripts that can be used to quickly
flesh out the basic structure of your application. All Catalyst projects
begin with the C<catalyst.pl> helper (see
-L<Catalyst::Helper|Catalyst::Helper> for more information on helpers).
+L<Catalyst::Helper> for more information on helpers).
Also note that as of Catalyst 5.7000, you will not have the helper
-scripts unless you install both L<Catalyst::Runtime|Catalyst::Runtime>
-and L<Catalyst::Devel|Catalyst::Devel>.
+scripts unless you install both L<Catalyst::Runtime>
+and L<Catalyst::Devel>.
In this first chapter of the tutorial, use the Catalyst C<catalyst.pl>
script to initialize the framework for an application called C<Hello>:
Catalyst will "auto-discover" modules in the Controller, Model, and View
-directories. When you use the hello_create.pl script it will create Perl
+directories. When you use the C<hello_create.pl> script it will create Perl
module scaffolds in those directories, plus test files in the "t"
directory. The default location for templates is in the "root"
directory. The scripts in the script directory will always start with
[debug] Statistics enabled
[debug] Loaded plugins:
.----------------------------------------------------------------------------.
- | Catalyst::Plugin::ConfigLoader 0.27 |
+ | Catalyst::Plugin::ConfigLoader 0.30 |
'----------------------------------------------------------------------------'
[debug] Loaded dispatcher "Catalyst::Dispatcher"
- [debug] Loaded engine "Catalyst::Engine::HTTP"
- [debug] Found home "/home/me/Hello"
- [debug] Loaded Config "/home/me/Hello/hello.conf"
+ [debug] Loaded engine "Catalyst::Engine"
+ [debug] Found home "/root/Hello"
+ [debug] Loaded Config "/root/Hello/hello.conf"
[debug] Loaded components:
.-----------------------------------------------------------------+----------.
| Class | Type |
| / | /default |
'-------------------------------------+--------------------------------------'
- [info] Hello powered by Catalyst 5.80020
- You can connect to your server at http://debian:3000
+ [info] Hello powered by Catalyst 5.90002
+ HTTP::Server::PSGI: Accepting connections at http://0:3000/
Point your web browser to L<http://localhost:3000> (substituting a
different hostname or IP address as appropriate) and you should be
your URL). Information similar to the following should be appended to
the logging output of the development server:
- [info] *** Request 1 (0.001/s) [23194] [Sat Jan 16 11:09:18 2010] ***
- [debug] "GET" request for "/" from "127.0.0.1"
+ [info] Hello powered by Catalyst 5.90002
+ HTTP::Server::PSGI: Accepting connections at http://0:3000/
+ [info] *** Request 1 (0.067/s) [19026] [Tue Aug 30 17:24:32 2011] ***
+ [debug] "GET" request for "/" from "192.168.245.2"
[debug] Path is "/"
- [info] Request took 0.004851s (206.143/s)
+ [debug] Response Code: 200; Content-Type: text/html; charset=utf-8; Content-Length: 5613
+ [info] Request took 0.040895s (24.453/s)
.------------------------------------------------------------+-----------.
| Action | Time |
+------------------------------------------------------------+-----------+
- | /index | 0.000395s |
- | /end | 0.000425s |
+ | /index | 0.000916s |
+ | /end | 0.000877s |
'------------------------------------------------------------+-----------'
B<Note>: Press C<Ctrl-C> to break out of the development server if
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|Catalyst>, L<Catalyst::Response|Catalyst::Response>, and
-L<Catalyst::Request|Catalyst::Request>)
+L<Catalyst>, L<Catalyst::Response>, and
+L<Catalyst::Request>)
C<$c-E<gt>response-E<gt>body> sets the HTTP response (see
-L<Catalyst::Response|Catalyst::Response>), while
+L<Catalyst::Response>), while
C<$c-E<gt>welcome_message> is a special method that returns the welcome
message that you saw in your browser.
to the package C<Hello::Controller::Admin::Articles>, and the C<create>
method.
-Add the following subroutine to your C<lib/Hello/Controller/Root.pm>
-file:
+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!),
+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!");
}
-Once you restart the server, you will need to use the new address
-L<http://localhost:3000/hello> instead of L<http://localhost:3000/> to see the
-changes.
-
B<TIP>: See Appendix 1 for tips on removing the leading spaces when
cutting and pasting example code from POD-based documents.
-Here you're sending your own string to the webpage.
-
-Save the file, and you should notice the following in your server output:
+Notice in the window running the Development Server that you should
+get output similar to the following:
Saw changes to the following files:
- - /home/me/Hello/lib/Hello/Controller/Root.pm (modify)
+ - /root/Hello/lib/Hello/Controller/Root.pm (modify)
Attempting to restart the server
...
| /index | Hello::Controller::Root | index |
| /hello | Hello::Controller::Root | hello |
'----------------------+--------------------------------------+--------------'
-
- [debug] Loaded Path actions:
- .-------------------------------------+--------------------------------------.
- | Path | Private |
- +-------------------------------------+--------------------------------------+
- | / | /index |
- | / | /default |
- | /hello | /hello |
- '-------------------------------------+--------------------------------------'
...
+The development server noticed the change in C<Hello::Controller::Root>
+and automatically restarted itself.
+
Go to L<http://localhost:3000/hello> to see "Hello, World!". Also
notice that the newly defined 'hello' action is listed under "Loaded
Private actions" in the development server debug output.
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
-the thing that generates the I<content> of that view (such as the a
+the thing that generates the I<content> of that view (such as a
Toolkit Template template file), the actual templates go under the
"root" directory.
The first argument "HTML" tells the script to name the View module "HTML.pm",
which is a commonly used name for TT views. You can name it anything you want,
such as "MyView.pm". If you have more than one view, be sure to set the
-default_view in Hello.pm (See L<Catalyst::View::TT|Catalyst::View::TT> for more
+default_view in Hello.pm (See L<Catalyst::View::TT> for more
details on setting this).
=item *
We've also put the variable "username" into the stash, for use in the
template.
-Make a subdirectory "site" in the "root" directory. Copy the hello.tt
-file into the directory as C<root/site/test.tt>, or create a new
-template file at that location. Include a line like:
+Make a subdirectory "site" in the "root" directory.
- <p>Hello, [% username %]!</p>
+ $ mkdir root/site
-You should see your test.tt file displayed, including the name "John"
-that you set in the controller.
+Create a new template file in that direction named C<root/site/test.tt>
+and include a line like:
+
+ <p>Hello, [% username %]!</p>
Once the server automatically restarts, notice in the server output that
C</site/test> is listed in the Loaded Path actions. Go to
-L<http://localhost:3000/site/test> in your browser.
+L<http://localhost:3000/site/test> in your browser and you should see
+your test.tt file displayed, including the name "John" that you set in
+the controller.
=head1 AUTHORS