Switch to svn for sample tutorial code
[catagits/Catalyst-Manual.git] / lib / Catalyst / Manual / Tutorial / 01_Intro.pod
CommitLineData
d442cc9f 1=head1 NAME
2
3ab6187c 3Catalyst::Manual::Tutorial::01_Intro - Catalyst Tutorial - Chapter 1: Introduction
d442cc9f 4
5
6=head1 OVERVIEW
7
4b4d3884 8This is B<Chapter 1 of 10> for the Catalyst tutorial.
d442cc9f 9
10L<Tutorial Overview|Catalyst::Manual::Tutorial>
11
12=over 4
13
14=item 1
15
3ab6187c 16B<01_Introduction>
d442cc9f 17
18=item 2
19
3ab6187c 20L<Catalyst Basics|Catalyst::Manual::Tutorial::02_CatalystBasics>
d442cc9f 21
22=item 3
23
3ab6187c 24L<More Catalyst Basics|Catalyst::Manual::Tutorial::03_MoreCatalystBasics>
d442cc9f 25
26=item 4
27
3ab6187c 28L<Basic CRUD|Catalyst::Manual::Tutorial::04_BasicCRUD>
d442cc9f 29
30=item 5
31
3ab6187c 32L<Authentication|Catalyst::Manual::Tutorial::05_Authentication>
d442cc9f 33
34=item 6
35
3ab6187c 36L<Authorization|Catalyst::Manual::Tutorial::06_Authorization>
d442cc9f 37
38=item 7
39
3ab6187c 40L<Debugging|Catalyst::Manual::Tutorial::07_Debugging>
d442cc9f 41
42=item 8
43
3ab6187c 44L<Testing|Catalyst::Manual::Tutorial::08_Testing>
d442cc9f 45
46=item 9
47
3ab6187c 48L<Advanced CRUD|Catalyst::Manual::Tutorial::09_AdvancedCRUD>
1def4a20 49
50=item 10
51
3ab6187c 52L<Appendices|Catalyst::Manual::Tutorial::10_Appendices>
d442cc9f 53
54=back
55
1def4a20 56
d442cc9f 57=head1 DESCRIPTION
58
ffeb7448 59This tutorial provides a multi-part introduction to the Catalyst web
d442cc9f 60framework. It seeks to provide a rapid overview of many of its most
61commonly used features. The focus is on the real-world best practices
62required in the construction of nearly all Catalyst applications.
63
64Although the primary target of the tutorial is users new to the Catalyst
65framework, experienced users may wish to review specific sections (for
1def4a20 66example, how to use DBIC for their model classes, how to add
67authentication and authorization to an existing application, or form
68management).
d442cc9f 69
70You can obtain the code for all the tutorial examples from the
71catalyst subversion repository by issuing the command:
72
028b4e1a 73 svn co http://dev.catalyst.perl.org/repos/Catalyst/trunk/examples/Tutorial/ CatalystTutorial
d442cc9f 74
75b13da6 75This will download the most recent code for each chapter of the
76tutorial into the CatalystTutorial directory on your machine.
d442cc9f 77
3d9ae335 78B<These reference implementations are provided so that when you follow
79the tutorial, you can use the code from the subversion repository to
80ensure that your system is set up correctly, and that you have not
81inadvertently made any typographic errors, or accidentally skipped
82part of the tutorial.>
83
ffeb7448 84B<NOTE: You can use any Perl-supported OS and environment to run
3533daff 85Catalyst.> It should make little or no difference to Catalyst's
acbd7bdd 86operation, B<but this tutorial has been written using the Debian 5
3f043f41 87live CD> because that represents a quick and easy way for most people to
acbd7bdd 88try out Catalyst with virtually zero setup time and hassles. Also,
89the tutorial has been tested to work correctly with the versions of
90Catalyst and all the supporting modules in Debian 5 (see "VERSIONS
91AND CONVENTIONS USED IN THIS TUTORIAL" below for the specific versions
92for some of the key modules), so B<if you think you might be running
93into an issue related to versions> (for example, a module changed its
94behavior in a newer version or a bug was introduced), B<it might be
444d6b27 95worth giving Debian 5 a try>.
3533daff 96
444d6b27 97If you plan to follow along with Debian 5, you can jump down to the
98"Debian" section under L</"CATALYST INSTALLATION"> below and it will walk you
99though the setup of a fully functional Catalyst environment. If you
100would prefer to install directly from CPAN, you can download the example
3533daff 101program and all the necessary dependencies to your local machine by
444d6b27 102installing the C<Task::Catalyst::Tutorial> distribution:
d442cc9f 103
104 cpan Task::Catalyst::Tutorial
105
106This will also test to make sure the dependencies are working. If you
107have trouble installing these, please ask for help on the #catalyst
108IRC channel, or the Catalyst mailing list.
109
3533daff 110Subjects covered by the tutorial include:
d442cc9f 111
112=over 4
113
114=item *
115
116A simple application that lists and adds books.
117
118=item *
119
acbd7bdd 120The use of L<DBIx::Class|DBIx::Class> (DBIC) for the model (including
121some of the more advanced techniques you will probably want to use in
122your applications).
d442cc9f 123
124=item *
125
126How to write CRUD (Create, Read, Update, and Delete) operations in
127Catalyst.
128
129=item *
130
131Authentication ("auth").
132
133=item *
134
135Role-based authorization ("authz").
136
137=item *
138
418ded01 139Attempts to provide an example showing current (5.8XXX) Catalyst
d442cc9f 140practices. For example, the use of
141L<Catalyst::Action::RenderView|Catalyst::Action::RenderView>,
142DBIC, L<Catalyst::Plugin::ConfigLoader|Catalyst::Plugin::ConfigLoader>
45d511e0 143with C<myapp.conf>, the use of C<lib/MyApp/Controller/Root.pm>
d442cc9f 144vs. C<lib/MyApp.pm>, etc.
145
146=item *
147
1390ef0e 148The use of Template Toolkit (TT).
d442cc9f 149
150=item *
151
152Useful techniques for troubleshooting and debugging Catalyst
153applications.
154
155=item *
156
157The use of SQLite as a database (with code also provided for MySQL and
444d6b27 158PostgreSQL). (Note: Because we make use of the DBIx::Class Object
159Relational Mapping [ORM] layer, out our application will be database
160agnostic and can easily be used by any of the databases supported
161by DBIx::Class.)
d442cc9f 162
163=item *
164
0abc72ed 165The use of L<HTML::FormFu|HTML::FormFu> or L<HTML::FormHandler|HTML::FormHandler>
166for automated form processing and validation.
d442cc9f 167
168=back
169
170This tutorial makes the learning process its main priority. For
171example, the level of comments in the code found here would likely be
1def4a20 172considered excessive in a "normal project." Because of their contextual
d442cc9f 173value, this tutorial will generally favor inline comments over a
174separate discussion in the text. It also deliberately tries to
175demonstrate multiple approaches to various features (in general, you
176should try to be as consistent as possible with your own production
177code).
178
179Furthermore, this tutorial tries to minimize the number of controllers,
180models, TT templates, and database tables. Although this does result in
181things being a bit contrived at times, the concepts should be applicable
182to more complex environments. More complete and complicated example
183applications can be found in the C<examples> area of the Catalyst
184Subversion repository at
185L<http://dev.catalyst.perl.org/repos/Catalyst/trunk/examples/>.
186
1390ef0e 187
d442cc9f 188=head1 VERSIONS AND CONVENTIONS USED IN THIS TUTORIAL
189
190This tutorial was built using the following resources. Please note that
191you may need to make adjustments for different environments and
6163536a 192versions (note that trailing zeros in version numbers are not
193significant and may get dropped with techniques for viewing them;
194for example, Catalyst v5.80020 might show up as 5.8002):
d442cc9f 195
196=over 4
197
198=item *
199
acbd7bdd 200Debian 5 (Lenny)
d442cc9f 201
202=item *
203
6163536a 204Catalyst v5.80020 (note: may show up as '5.8002' without the trailing zero)
dd88c3b6 205
22a67212 206=item *
dd88c3b6 207
6163536a 208Catalyst::Devel v1.26
d442cc9f 209
210=item *
211
6163536a 212DBIx::Class v0.08115
d442cc9f 213
fce83e5f 214=item *
215
216Template Toolkit v2.20
217
d442cc9f 218=item *
219
220Catalyst Plugins
221
222The plugins used in this tutorial all have sufficiently stable APIs that
223you shouldn't need to worry about versions. However, there could be
224cases where the tutorial is affected by what version of plugins you
225use. This tutorial has been tested against the following set of plugins:
226
227=over 4
228
229=item *
230
6163536a 231Catalyst::Plugin::Authentication -- v0.10016
d442cc9f 232
233=item *
234
6163536a 235Catalyst::Plugin::Authorization::Roles -- v0.08
d442cc9f 236
237=item *
238
f34d7f62 239Catalyst::Plugin::ConfigLoader -- v0.27
d442cc9f 240
241=item *
242
f34d7f62 243Catalyst::Plugin::Session -- v0.29
d442cc9f 244
245=item *
246
f34d7f62 247Catalyst::Plugin::Session::State::Cookie -- v0.17
d442cc9f 248
249=item *
250
f34d7f62 251Catalyst::Plugin::Session::Store::FastMmap -- v0.13
d442cc9f 252
253=item *
254
f34d7f62 255Catalyst::Plugin::StackTrace -- v0.11
d442cc9f 256
257=item *
258
6163536a 259Catalyst::Plugin::Static::Simple -- v0.28
d442cc9f 260
261=back
262
263=item *
264
865d3efb 265B<NOTE:> You can check the versions you have installed with the
266following command:
267
896ec184 268 perl -M<_mod_name_> -e '"print $<_mod_name_>::VERSION\n"'
865d3efb 269
270For example:
865d3efb 271
444d6b27 272 perl -MCatalyst -e 'print "$Catalyst::VERSION\n";'
273
274or:
275
276 perl -MCatalyst::Devel -e 'print "$Catalyst::Devel::VERSION\n";'
d442cc9f 277
278=item *
279
444d6b27 280This tutorial will assume that the web browser is located on the same
281system where the Catalyst development server is running, and
282therefore use a URL of C<http://localhost:3000> (the Catalyst
283development server defaults to port 3000). If you are running Perl on
284a different box than where your web browser is located (or using a
285different port number via the C<-p> I<port_number> option to the
286development server), then you will need to update the URL you use
287accordingly.
288
289Please Note: Depending on the web browser you are using, you might
290need to hit C<Shift+Reload> or C<Ctrl+Reload> to pull a fresh page
291when testing your application at various points (see
292L<http://en.wikipedia.org/wiki/Bypass_your_cache> for a comprehensive
1390ef0e 293list of options for each browser). Also, the C<-k> keepalive option
294to the development server can be necessary with some browsers
295(especially Internet Explorer).
d442cc9f 296
297=back
298
1390ef0e 299
d442cc9f 300=head1 CATALYST INSTALLATION
301
acbd7bdd 302Although Catalyst installation has been a challenge in the past, the
303good news is that there are a growing number of options to eliminate
304(or at least dramatically simplify) this concern. Although a
305compelling strength of Catalyst is that it makes use of many of the
306modules in the vast repository that is CPAN, this can complicate the
307installation process if you approach it in the wrong way. Consider
308the following suggestions on the most common ways to get started with
309a Catalyst development environment:
1def4a20 310
311=over 4
312
313=item *
314
acbd7bdd 315Debian
316
317The Debian 5 live CD represents a great way for newcomers to
318experiment with Catalyst. As a "live CD," you can simple boot from
319the CD, run a few commands, and in a matter of minutes you should have
320a fully function environment in which do this tutorial. B<The tutorial
321was fully tested to work under Debian 5. Although it SHOULD work
322under any Catalyst installation method you might choose, it can be
323hard to guarantee this.>
324
325=over 4
326
327=item *
328
329Download one of the ISO files from
6163536a 330L<http://cdimage.debian.org/cdimage/release/current-live/i386/iso-cd/>
331(the current version at the time this was written was 5.0.3).
acbd7bdd 332You can pick any one of the live CD variations will work, but
333you may wish to consider the following points:
334
335=over 4
336
337=item *
338
6163536a 339"C<debian-live-503-i386-rescue.iso>" is probably the best all-around
acbd7bdd 340option for most people because it includes many extra tools such as
341the GCC compiler, therefore saving RAM (every package you need to
342install when running from live CD consumes memory because RAM disk is
343being used in lieu of real disk space). When initially booting under
344this image, you may see some cryptic warning messages having to do
345with various diagnostic tools it tries to load or enable, but you
346should be able to safely ignore these.
347
348=item *
349
6163536a 350"C<debian-live-503-i386-standard.iso>" is a great option because of
acbd7bdd 351its compact size, but you will probably need approximately 1 GB of RAM
352in the computer where you will run the tutorial. Because the
353"standard" live CD comes with with a minimal set of tools, we will
354have to install extra packages (such as the GCC compiler), all of
355which will require RAM when running from a live CD.
356
357=item *
358
359The other ISO images include different flavors of X-Windows desktop
360managers. You can select one of these if you don't mind the larger
361download size and prefer a graphical environment. Be aware that these
362disks do not come with the extra tools found on the "rescue" image, so
363you will need adequate RAM to be able to install them just as you
364would under the "standard" image. B<Use one of the "graphical" ISO
365images if you want a graphical web browser on the same machine as
366where you will run the tutorial.> (If you are using one of the non-
367graphical images discussed above, you can still use a graphical web
368browser from another machine and point it to your Catalyst development
369machine.)
370
371=back
372
373=item *
374
375Boot off the CD.
376
377=item *
378
379Select "C<Live>" from the initial boot menu.
380
381=item *
382
6163536a 383Once the system has booted to a "C<user@debian:~$>" prompt, first
384install the Subversion client in case you want to check out the
385completed chapter example code:
386
387 sudo aptitude -y install subversion
388
389Then enter the following command to add the more current "unstable"
390package repository so we get the latest versions of Catalyst and
391related packages:
acbd7bdd 392
393 sudo vi /etc/apt/sources.list
394
395Add the following line to the bottom of this file:
396
397 deb http://ftp.us.debian.org/debian/ unstable main
398
399If you are not familiar with VI, you can move to the bottom of this
400file and press the "o" key to insert a new line and type the line
401above. Then press the "Esc" key followed by a colon (":"), the
402letters "wq" and then the "Enter" key. The rest of the tutorial will
403assume that you know how to use some editor that is available from the
404Linux command-line environment.
405
406=item *
407
408Install Catalyst:
409
410 sudo aptitude update
411 sudo aptitude -y install sqlite3 libdbd-sqlite3-perl libcatalyst-perl \
444d6b27 412 libcatalyst-modules-perl libdbix-class-timestamp-perl \
2314f851 413 libdatetime-format-sqlite-perl libconfig-general-perl \
6163536a 414 libhtml-formfu-model-dbic-perl libterm-readline-perl-perl
444d6b27 415
416Let it install (normally about a 30 to 90-second operaton) and you are
417done. (Note the '\' above. Depending on your environment, you might
418be able to cut and paste the text as shown or need to remove the '\'
fce83e5f 419characters to that the command is all on a single line.)
acbd7bdd 420
421If you are using an image other than the "rescue" ISO, you will also need
422to run the following command to install additional packages:
423
424 sudo aptitude -y install gcc make libc6-dev
425
426If you are running from the Live CD, you probably also want to free up
427some RAM disk space with the following:
428
429 sudo aptitude clean
430
431NOTE: While the instructions above mention the Live CD because that
432makes it easy for people new to Linux, you can obviously pick a
433different Debian ISO image and install it to your hard drive.
434Although there are many different ways to download and install Debian,
435the "netinst" ISO image (such as "C<debian-500-i386-netinst.iso>"
436represents a great option because it keeps your initial download small
437(but still let's you install anything you want "over the network").
438
439Here are some tips if you are running from a live CD and are running
440out of disk space (which really means you are running out of RAM):
441
442=over 4
443
444=item *
445
446Always run "C<aptitude clean>" after you install new packages to
447delete the original .deb files (the files installed B<by> the .deb
448package B<will> remain available, just the .deb package itself is
449deleted).
450
451=item *
452
453If you are installing modules from CPAN, you can free up some space
444d6b27 454with "C<rm -rf /root/.cpan/*>" (change "/root/" in the previous
455command to match your home directory or the location where CPAN
456has been configured to perform build operations).
acbd7bdd 457
458=item *
459
460If necessary, you can remove the cached package information with the
461command "C<rm -f /var/lib/apt/lists/*>". You can later pull this
462information again via the command "C<aptitude update>".
463
464=item *
465
466You can save a small amount of space by commenting out the lines in
467C</etc/apt/sources.list> that reference "deb-src" and
468"security.debian.org". If you have already done an "C<aptitude
469update>" with these repositories enabled, you can use the tip in the
470previous bullet to free the space up (and then do another "C<aptitude
471update>").
472
473=item *
474
475Although you can free up space by removing packages you installed
476since you last booted (check out "C<aptitude remove _pkg_name>"),
477don't bother trying to remove packages already available at the time
478of boot. Instead of freeing up space, it will actual I<consume> some
479space. (The live CD uses these "burn in" packages right from the CD
480disk vs. first loading them on the virtual RAM disk. However, if you
481remove them, the system has to update various files, something that
482I<does> consume some space on the virtual RAM disk.)
483
484=back
485
486=back
487
488=item *
489
1def4a20 490Ubuntu
491
acbd7bdd 492Ubuntu is an extremely popular offshoot of Debian. It provides
493cutting edge versions of many common tools, application and libraries
494in an easy-to-run live CD configuration (and because a single download
495option can be used for both live CD and install-to-disk usage, it
496keeps your download options nice and simple). As with Debian 5, you
497should be able to generate a fully function Catalyst environment in a
498matter of minutes. Here are quick instructions on how to use Ubuntu
499to prepare for the tutorial:
d442cc9f 500
501=over 4
502
503=item *
504
acbd7bdd 505Download the Ubuntu Desktop edition and boot from the CD and/or image
506file, select your language, and then "Try Ubuntu without any changes
507to your computer."
1def4a20 508
509=item *
510
3533daff 511Open a terminal session (click "Applications" in the upper-left
512corner, then "Accessories," then "Terminal").
1def4a20 513
514=item *
515
516Add the 'universe' repositories:
517
3533daff 518 sudo gedit /etc/apt/sources.list
1def4a20 519
520And remove the comments from the lines under the comments about the
521'universe' repositories.
522
523=item *
524
525Install Catalyst:
526
acbd7bdd 527 sudo aptitude update
528 sudo aptitude install libdbd-sqlite3-perl libcatalyst-perl libcatalyst-modules-perl libconfig-general-perl
1def4a20 529
2b75577c 530Accept all of the dependencies. Done.
531
532If you are running from the Live CD, you probably also want to free up
533some disk space with the following:
534
acbd7bdd 535 sudo aptitude clean
2b75577c 536
acbd7bdd 537NOTE: While the instructions above mention the live CD because that
2b75577c 538makes it easy for people new to Linux, you can obviously also use one
539of the options to install Ubuntu on your drive.
3533daff 540
1def4a20 541=back
542
543=item *
544
d442cc9f 545Matt Trout's C<cat-install>
546
1ee1c3c3 547Available at L<http://www.shadowcat.co.uk/static/cat-install>,
ffeb7448 548C<cat-install> can be a fairly painless way to get Catalyst up and
549running. Just download the script from the link above and type C<perl
550cat-install>. Depending on the speed of your Internet connection and
551your computer, it will probably take 30 to 60 minutes to install because
552it downloads, makes, compiles, and tests every module. But this is an
553excellent way to automate the installation of all the latest modules
554used by Catalyst from CPAN.
555
d442cc9f 556
557=item *
558
ffeb7448 559Other Possibilities
560
561=over 4
562
563=item *
564
565OpenBSD Packages
566
567The 2008 Advent Day 4 entry has more information on using OpenBSD
568packages to quickly build a system:
569L<http://www.catalystframework.org/calendar/2008/4>.
570
571=item *
d442cc9f 572
ffeb7448 573NetBSD Package Collection on Solaris
574
575The 2008 Advent Day 15 entry has more information on using C<pkgsrc> and
576NetBSD packages on Solaris:
1435672d 577L<http://www.catalystframework.org/calendar/2008/15>.
d442cc9f 578
579=item *
580
ffeb7448 581CatInABox
582
583You can get more information at
584L<http://www.catalystframework.org/calendar/2008/7>
585or L<Perl::Dist::CatInABox|Perl::Dist::CatInABox>.
586
0c51850e 587=item *
588
589Frank Speiser's Amazon EC2 Catalyst SDK
590
591There are currently two flavors of publicly available Amazon Machine
592Images (AMI) that include all the elements you'd need to begin
593developing in a fully functional Catalyst environment within minutes.
594See L<Catalyst::Manual::Installation|Catalyst::Manual::Installation>
595for more details.
596
d442cc9f 597=back
598
ffeb7448 599=back
600
d442cc9f 601For additional information and recommendations on Catalyst installation,
602please refer to
603L<Catalyst::Manual::Installation|Catalyst::Manual::Installation>.
604
1390ef0e 605
d442cc9f 606=head1 DATABASES
607
608This tutorial will primarily focus on SQLite because of its simplicity
609of installation and use; however, modifications in the script required
acbd7bdd 610to support MySQL and PostgreSQL will be presented in Appendix.
d442cc9f 611
612B<Note:> One of the advantages of the MVC design patterns is that
613applications become much more database independent. As such, you will
614notice that only the C<.sql> files used to initialize the database
615change between database systems: the Catalyst code generally remains the
616same.
617
1390ef0e 618
d442cc9f 619=head1 WHERE TO GET WORKING CODE
620
4b4d3884 621Each chapter of the tutorial has complete code available as a tarball in
028b4e1a 622the main Catalyst Subversion repository (see the note at the beginning
623of each part for the appropriate svn command to use).
d442cc9f 624
4b4d3884 625B<NOTE:> You can run the test cases for the final code through Chapter 8
028b4e1a 626with the following commands:
d442cc9f 627
6163536a 628 svn co http://dev.catalystframework.org/repos/Catalyst/trunk/examples/Tutorial/MyApp_Chapter8
629 cd MyApp_Chapter8/MyApp
96a87356 630 CATALYST_DEBUG=0 prove -wl t
d442cc9f 631
96a87356 632If you wish to include the L<HTML::FormFu|HTML::FormFu> section in your tests,
6163536a 633substitute C<MyApp_Chapter9_FormFu> for C<MyApp_Chapter8> in the URL
634above (don't forget to "cd" out of the Ch8 directory if you ran the code above).
acbd7bdd 635
6163536a 636 svn co http://dev.catalystframework.org/repos/Catalyst/trunk/examples/Tutorial/MyApp_Chapter9_FormFu
637 cd MyApp_Chapter9_FormFu/MyApp
96a87356 638 CATALYST_DEBUG=0 prove -wl t
acbd7bdd 639
640You can also fire up the application under the development server that is conveniently
641built in to Catalyst. Just issue this command from the C<MyApp> directory where you
642ran the test suite above:
643
644 script/myapp_server.pl
645
646And the application will start. You can try out the application by
647pulling up C<http://localhost:3000> in your web browser (as mentioned
648earlier, change C<localhost> to a different IP address or DNS name if
649you are running your web browser and your Catalyst development on
650different boxes). We will obviously see more about how to use the
4b4d3884 651application as we go through the remaining chapters of the tutorial, but
acbd7bdd 652for now you can log in using the username "test01" and a password of
653"mypass".
654
d442cc9f 655
656=head1 AUTHOR
657
658Kennedy Clark, C<hkclark@gmail.com>
659
660Please report any errors, issues or suggestions to the author. The
661most recent version of the Catalyst Tutorial can be found at
59884771 662L<http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-Manual/5.80/trunk/lib/Catalyst/Manual/Tutorial/>.
d442cc9f 663
45c7830f 664Copyright 2006-2008, Kennedy Clark, under Creative Commons License
865d3efb 665(L<http://creativecommons.org/licenses/by-sa/3.0/us/>).