Add some additonal info about DBIC relationships
[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 \
9314188c 414 libhtml-formfu-model-dbic-perl libterm-readline-perl-perl \
415 libdbix-class-encodedcolumn-perl
444d6b27 416
417Let it install (normally about a 30 to 90-second operaton) and you are
418done. (Note the '\' above. Depending on your environment, you might
419be able to cut and paste the text as shown or need to remove the '\'
fce83e5f 420characters to that the command is all on a single line.)
acbd7bdd 421
422If you are using an image other than the "rescue" ISO, you will also need
423to run the following command to install additional packages:
424
425 sudo aptitude -y install gcc make libc6-dev
426
427If you are running from the Live CD, you probably also want to free up
428some RAM disk space with the following:
429
430 sudo aptitude clean
431
432NOTE: While the instructions above mention the Live CD because that
433makes it easy for people new to Linux, you can obviously pick a
434different Debian ISO image and install it to your hard drive.
435Although there are many different ways to download and install Debian,
436the "netinst" ISO image (such as "C<debian-500-i386-netinst.iso>"
437represents a great option because it keeps your initial download small
438(but still let's you install anything you want "over the network").
439
440Here are some tips if you are running from a live CD and are running
441out of disk space (which really means you are running out of RAM):
442
443=over 4
444
445=item *
446
447Always run "C<aptitude clean>" after you install new packages to
448delete the original .deb files (the files installed B<by> the .deb
449package B<will> remain available, just the .deb package itself is
450deleted).
451
452=item *
453
454If you are installing modules from CPAN, you can free up some space
444d6b27 455with "C<rm -rf /root/.cpan/*>" (change "/root/" in the previous
456command to match your home directory or the location where CPAN
457has been configured to perform build operations).
acbd7bdd 458
459=item *
460
461If necessary, you can remove the cached package information with the
462command "C<rm -f /var/lib/apt/lists/*>". You can later pull this
463information again via the command "C<aptitude update>".
464
465=item *
466
467You can save a small amount of space by commenting out the lines in
468C</etc/apt/sources.list> that reference "deb-src" and
469"security.debian.org". If you have already done an "C<aptitude
470update>" with these repositories enabled, you can use the tip in the
471previous bullet to free the space up (and then do another "C<aptitude
472update>").
473
474=item *
475
476Although you can free up space by removing packages you installed
477since you last booted (check out "C<aptitude remove _pkg_name>"),
478don't bother trying to remove packages already available at the time
479of boot. Instead of freeing up space, it will actual I<consume> some
480space. (The live CD uses these "burn in" packages right from the CD
481disk vs. first loading them on the virtual RAM disk. However, if you
482remove them, the system has to update various files, something that
483I<does> consume some space on the virtual RAM disk.)
484
485=back
486
487=back
488
489=item *
490
1def4a20 491Ubuntu
492
acbd7bdd 493Ubuntu is an extremely popular offshoot of Debian. It provides
494cutting edge versions of many common tools, application and libraries
495in an easy-to-run live CD configuration (and because a single download
496option can be used for both live CD and install-to-disk usage, it
497keeps your download options nice and simple). As with Debian 5, you
498should be able to generate a fully function Catalyst environment in a
499matter of minutes. Here are quick instructions on how to use Ubuntu
500to prepare for the tutorial:
d442cc9f 501
502=over 4
503
504=item *
505
acbd7bdd 506Download the Ubuntu Desktop edition and boot from the CD and/or image
507file, select your language, and then "Try Ubuntu without any changes
508to your computer."
1def4a20 509
510=item *
511
3533daff 512Open a terminal session (click "Applications" in the upper-left
513corner, then "Accessories," then "Terminal").
1def4a20 514
515=item *
516
517Add the 'universe' repositories:
518
3533daff 519 sudo gedit /etc/apt/sources.list
1def4a20 520
521And remove the comments from the lines under the comments about the
522'universe' repositories.
523
524=item *
525
526Install Catalyst:
527
acbd7bdd 528 sudo aptitude update
529 sudo aptitude install libdbd-sqlite3-perl libcatalyst-perl libcatalyst-modules-perl libconfig-general-perl
1def4a20 530
2b75577c 531Accept all of the dependencies. Done.
532
533If you are running from the Live CD, you probably also want to free up
534some disk space with the following:
535
acbd7bdd 536 sudo aptitude clean
2b75577c 537
acbd7bdd 538NOTE: While the instructions above mention the live CD because that
2b75577c 539makes it easy for people new to Linux, you can obviously also use one
540of the options to install Ubuntu on your drive.
3533daff 541
1def4a20 542=back
543
544=item *
545
d442cc9f 546Matt Trout's C<cat-install>
547
1ee1c3c3 548Available at L<http://www.shadowcat.co.uk/static/cat-install>,
ffeb7448 549C<cat-install> can be a fairly painless way to get Catalyst up and
550running. Just download the script from the link above and type C<perl
551cat-install>. Depending on the speed of your Internet connection and
552your computer, it will probably take 30 to 60 minutes to install because
553it downloads, makes, compiles, and tests every module. But this is an
554excellent way to automate the installation of all the latest modules
555used by Catalyst from CPAN.
556
d442cc9f 557
558=item *
559
ffeb7448 560Other Possibilities
561
562=over 4
563
564=item *
565
566OpenBSD Packages
567
568The 2008 Advent Day 4 entry has more information on using OpenBSD
569packages to quickly build a system:
570L<http://www.catalystframework.org/calendar/2008/4>.
571
572=item *
d442cc9f 573
ffeb7448 574NetBSD Package Collection on Solaris
575
576The 2008 Advent Day 15 entry has more information on using C<pkgsrc> and
577NetBSD packages on Solaris:
1435672d 578L<http://www.catalystframework.org/calendar/2008/15>.
d442cc9f 579
580=item *
581
ffeb7448 582CatInABox
583
584You can get more information at
585L<http://www.catalystframework.org/calendar/2008/7>
586or L<Perl::Dist::CatInABox|Perl::Dist::CatInABox>.
587
0c51850e 588=item *
589
590Frank Speiser's Amazon EC2 Catalyst SDK
591
592There are currently two flavors of publicly available Amazon Machine
593Images (AMI) that include all the elements you'd need to begin
594developing in a fully functional Catalyst environment within minutes.
595See L<Catalyst::Manual::Installation|Catalyst::Manual::Installation>
596for more details.
597
d442cc9f 598=back
599
ffeb7448 600=back
601
d442cc9f 602For additional information and recommendations on Catalyst installation,
603please refer to
604L<Catalyst::Manual::Installation|Catalyst::Manual::Installation>.
605
1390ef0e 606
d442cc9f 607=head1 DATABASES
608
609This tutorial will primarily focus on SQLite because of its simplicity
610of installation and use; however, modifications in the script required
acbd7bdd 611to support MySQL and PostgreSQL will be presented in Appendix.
d442cc9f 612
613B<Note:> One of the advantages of the MVC design patterns is that
614applications become much more database independent. As such, you will
615notice that only the C<.sql> files used to initialize the database
616change between database systems: the Catalyst code generally remains the
617same.
618
1390ef0e 619
d442cc9f 620=head1 WHERE TO GET WORKING CODE
621
4b4d3884 622Each chapter of the tutorial has complete code available as a tarball in
028b4e1a 623the main Catalyst Subversion repository (see the note at the beginning
624of each part for the appropriate svn command to use).
d442cc9f 625
4b4d3884 626B<NOTE:> You can run the test cases for the final code through Chapter 8
028b4e1a 627with the following commands:
d442cc9f 628
6163536a 629 svn co http://dev.catalystframework.org/repos/Catalyst/trunk/examples/Tutorial/MyApp_Chapter8
630 cd MyApp_Chapter8/MyApp
96a87356 631 CATALYST_DEBUG=0 prove -wl t
d442cc9f 632
96a87356 633If you wish to include the L<HTML::FormFu|HTML::FormFu> section in your tests,
6163536a 634substitute C<MyApp_Chapter9_FormFu> for C<MyApp_Chapter8> in the URL
635above (don't forget to "cd" out of the Ch8 directory if you ran the code above).
acbd7bdd 636
6163536a 637 svn co http://dev.catalystframework.org/repos/Catalyst/trunk/examples/Tutorial/MyApp_Chapter9_FormFu
638 cd MyApp_Chapter9_FormFu/MyApp
96a87356 639 CATALYST_DEBUG=0 prove -wl t
acbd7bdd 640
641You can also fire up the application under the development server that is conveniently
642built in to Catalyst. Just issue this command from the C<MyApp> directory where you
643ran the test suite above:
644
645 script/myapp_server.pl
646
647And the application will start. You can try out the application by
648pulling up C<http://localhost:3000> in your web browser (as mentioned
649earlier, change C<localhost> to a different IP address or DNS name if
650you are running your web browser and your Catalyst development on
651different boxes). We will obviously see more about how to use the
4b4d3884 652application as we go through the remaining chapters of the tutorial, but
acbd7bdd 653for now you can log in using the username "test01" and a password of
654"mypass".
655
d442cc9f 656
657=head1 AUTHOR
658
659Kennedy Clark, C<hkclark@gmail.com>
660
661Please report any errors, issues or suggestions to the author. The
662most recent version of the Catalyst Tutorial can be found at
59884771 663L<http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-Manual/5.80/trunk/lib/Catalyst/Manual/Tutorial/>.
d442cc9f 664
45c7830f 665Copyright 2006-2008, Kennedy Clark, under Creative Commons License
865d3efb 666(L<http://creativecommons.org/licenses/by-sa/3.0/us/>).