Misc minor fixups.
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Manual / Tutorial / Intro.pod
CommitLineData
4d583dd8 1=head1 NAME
2
64ccd8a8 3Catalyst::Manual::Tutorial::Intro - Catalyst Tutorial - Part 1: Introduction
4d583dd8 4
5
4d583dd8 6=head1 OVERVIEW
7
653f4595 8This is B<Part 1 of 9> of the Catalyst Tutorial.
4d583dd8 9
64ccd8a8 10L<Tutorial Overview|Catalyst::Manual::Tutorial>
4d583dd8 11
12=over 4
13
14=item 1
15
16B<Introduction>
17
18=item 2
19
20L<Catalyst Basics|Catalyst::Manual::Tutorial::CatalystBasics>
21
22=item 3
23
653f4595 24L<Basic CRUD|Catalyst::Manual::Tutorial::BasicCRUD>
4d583dd8 25
26=item 4
27
28L<Authentication|Catalyst::Manual::Tutorial::Authentication>
29
30=item 5
31
32L<Authorization|Catalyst::Manual::Tutorial::Authorization>
33
34=item 6
35
36L<Debugging|Catalyst::Manual::Tutorial::Debugging>
37
38=item 7
39
40L<Testing|Catalyst::Manual::Tutorial::Testing>
41
42=item 8
43
653f4595 44L<Advanced CRUD|Catalyst::Manual::Tutorial::AdvancedCRUD>
4d583dd8 45
46=item 9
47
653f4595 48L<Appendices|Catalyst::Manual::Tutorial::Appendices>
4d583dd8 49
50=back
51
4d583dd8 52=head1 DESCRIPTION
53
653f4595 54This tutorial provides a multipart introduction to the Catalyst web
55framework. It seeks to provide a rapid overview of many of its most
56commonly used features. The focus is on the real-world best practices
64ccd8a8 57required in the construction of nearly all Catalyst applications.
4d583dd8 58
64ccd8a8 59Although the primary target of the tutorial is users new to the Catalyst
60framework, experienced users may wish to review specific sections (for
61example, how to use DBIC for their model classes or how to add
62authentication and authorization to an existing application).
4d583dd8 63
64Subjects covered include:
65
66=over 4
67
68=item *
69
70A simple application that lists and adds books.
71
72=item *
73
14e6feb0 74The use of L<DBIx::Class|DBIx::Class> (DBIC) for the model.
4d583dd8 75
76=item *
77
653f4595 78How to write CRUD (Create, Read, Update, and Delete) operations in
79Catalyst.
4d583dd8 80
81=item *
82
83Authentication ("auth").
84
85=item *
86
87Role-based authorization ("authz").
88
89=item *
90
653f4595 91Attempts to provide an example showing current (5.70) Catalyst
14e6feb0 92practices. For example, the use of
93L<Catalyst::Plugin::DefaultEnd|Catalyst::Plugin::DefaultEnd>,
94DBIC, L<Catalyst::Plugin::ConfigLoader|Catalyst::Plugin::ConfigLoader>
95with C<myapp.yml>, the use of C<lib/MyApp/Controller/Root.pm>
96vs. C<lib/MyApp.pm>, etc.
4d583dd8 97
98=item *
99
653f4595 100The use of Template Toolkit (TT) and the
14e6feb0 101L<Catalyst::Helper::View::TTSite|Catalyst::Helper::View::TTSite>
102view helper.
4d583dd8 103
104=item *
105
653f4595 106Useful techniques for troubleshooting and debugging Catalyst
107applications.
4d583dd8 108
109=item *
110
653f4595 111The use of SQLite as a database (with code also provided for MySQL and
112PostgreSQL).
4d583dd8 113
114=item *
115
653f4595 116The use of HTML::Widget for automated form processing and validation.
4d583dd8 117
118=back
119
653f4595 120This tutorial makes the learning process its main priority. For
121example, the level of comments in the code found here would like be
122considered excessive in a "normal project". Because of their contextual
123value, this tutorial will generally favor inline comments over a
124separate discussion in the text. It also deliberately tries to
125demonstrate multiple approaches to various features (in general, you
126should try to be as consistent as possible with your own production
127code).
4d583dd8 128
64ccd8a8 129Furthermore, this tutorial tries to minimize the number of controllers,
130models, TT templates, and database tables. Although this does result in
131things being a bit contrived at times, the concepts should be applicable
132to more complex environments. More complete and complicated example
133applications can be found in the C<examples> area of the Catalyst
134Subversion repository at
135L<http://dev.catalyst.perl.org/repos/Catalyst/trunk/examples/>.
4d583dd8 136
64ccd8a8 137B<Note:> There are a variety of other introductory materials available
138through the Catalyst web site and at
139L<http://dev.catalyst.perl.org/wiki/UserIntroductions> and
140L<http://dev.catalyst.perl.org/>.
4d583dd8 141
4d583dd8 142=head1 VERSIONS AND CONVENTIONS USED IN THIS TUTORIAL
143
653f4595 144This tutorial was built using the following resources. Please note that
145you may need to make adjustments for different environments and
64ccd8a8 146versions:
4d583dd8 147
148=over 4
149
150=item *
151
152OS = CentOS 4 Linux (RHEL 4)
153
154=item *
155
14e6feb0 156Catalyst v5.6902
4d583dd8 157
158=item *
159
14e6feb0 160DBIx::Class v0.06003
4d583dd8 161
162=item *
163
164Catalyst Plugins
165
653f4595 166The plugins used in this tutorial all have sufficiently stable APIs that
167you shouldn't need to worry about versions. However, there could be
168cases where the tutorial is affected by what version of plugins you
169use. The plugins used for this tutorial are:
4d583dd8 170
171=over 4
172
173=item *
174
175Catalyst::Plugin::Authentication -- 0.07
176
177=item *
178
179Authentication::Credential::Password -- 0.07
180
181=item *
182
183Catalyst::Plugin::Authentication::Store::DBIC -- 0.06
184
185=item *
186
187Catalyst::Plugin::Authorization::ACL -- 0.06
188
189=item *
190
191Catalyst::Plugin::Authorization::Roles -- 0.04
192
193=item *
194
195Catalyst::Plugin::ConfigLoader -- 0.07
196
197=item *
198
199Catalyst::Plugin::DefaultEnd -- 0.06
200
201=item *
202
4d583dd8 203Catalyst::Plugin::HTML::Widget -- 1.1
204
205=item *
206
207Catalyst::Plugin::Session -- 0.05
208
209=item *
210
211Catalyst::Plugin::Session::FastMmap -- 0.12
212
213=item *
214
215Catalyst::Plugin::Session::State::Cookie -- 0.02
216
217=item *
218
14e6feb0 219Catalyst::Plugin::Session::Store::FastMmap -- 0.02
4d583dd8 220
221=item *
222
14e6feb0 223Catalyst::Plugin::StackTrace -- 0.04
4d583dd8 224
225=item *
226
227Catalyst::Plugin::Static::Simple -- 0.14
228
229=back
230
231=item *
232
64ccd8a8 233Since the web browser is being used on the same box where Perl and the
234Catalyst development server is running, the URL of
235C<http://localhost:3000> will be used (the Catalyst development server
236defaults to port 3000). If you are running Perl on a different box than
237where your web browser is located (or using a different port number via
238the C<-p> I<port_number> option to the development server), then you
239will need to update the URL you use accordingly.
4d583dd8 240
241=item *
242
64ccd8a8 243Depending on the web browser you are using, you might need to hit
244C<Shift+Reload> to pull a fresh page when testing your application at
245various points. Also, the C<-k> keepalive option to the development
246server can be necessary with some browsers (especially Internet
247Explorer).
4d583dd8 248
249=back
250
4d583dd8 251=head1 CATALYST INSTALLATION
252
64ccd8a8 253Unfortunately, one of the most daunting tasks faced by newcomers to
254Catalyst is getting it installed. Although a compelling strength of
653f4595 255Catalyst is that it can easily make use of many of the modules in the
256vast repository that is CPAN, this can result in initial installations
257that are both time consuming and frustrating. However, there are a
258growing number of methods that can dramatically ease this undertaking.
259Of these, the following are likely to be applicable to the largest
260number of potential new users:
4d583dd8 261
262=over 4
263
264=item *
265
64ccd8a8 266Matt Trout's C<cat-install>
4d583dd8 267
64ccd8a8 268Available at L<http://www.shadowcatsystems.co.uk/static/cat-install>,
269C<cat-install> can be a quick and painless way to get Catalyst up and
270running. Just download the script from the link above and type C<perl
271cat-install>.
4d583dd8 272
273=item *
274
275Chris Laco's CatInABox
276
64ccd8a8 277Download the tarball from
278L<http://handelframework.com/downloads/CatInABox.tar.gz> and unpack it
279on your machine. Depending on your OS platform, either run C<start.bat>
280or C<start.sh>.
4d583dd8 281
282=item *
283
284Pre-Built VMWare Images
285
64ccd8a8 286Under the VMWare community program, work is ongoing to develop a number
287of VMWare images where an entire Catalyst development environment has
288already been installed, complete with database engines and a full
289complement of Catalyst plugins.
4d583dd8 290
291=back
292
653f4595 293For additional information and recommendations on Catalyst installation,
14e6feb0 294please refer to
295L<Catalyst::Manual::Installation|Catalyst::Manual::Installation>.
4d583dd8 296
14e6feb0 297B<NOTE:> Step-by-step instructions to replicate the environment on
64ccd8a8 298which this tutorial was developed can be found at
14e6feb0 299L<Catalyst::Manual::Installation::CentOS4|Catalyst::Manual::Installation::CentOS4>.
64ccd8a8 300Using these instructions, you should be able to build a complete CentOS
3014.X server with Catalyst and all the plugins required to run this
302tutorial.
4d583dd8 303
4d583dd8 304=head1 DATABASES
305
653f4595 306This tutorial will primarily focus on SQLite because of its simplicity
307of installation and use; however, modifications in the script required
308to support MySQL and PostgreSQL will be presented in Appendix 2.
4d583dd8 309
64ccd8a8 310B<Note:> One of the advantages of the MVC design patterns is that
311applications become much more database independent. As such, you will
312notice that only the C<.sql> files used to initialize the database
653f4595 313change between database systems: the Catalyst code generally remains the
314same.
4d583dd8 315
316=head1 WHERE TO GET WORKING CODE
317
64ccd8a8 318Each part of the tutorial has complete code available in the main
319Catalyst Subversion repository (see the note at the beginning of each
320part for the appropriate svn command to use). Additionally, the final
321code is available as a ready-to-run tarball at
14e6feb0 322I<TO_BE_ADDED_TO_FINAL_VERSION>.
4d583dd8 323
a63e6e67 324
4d583dd8 325=head1 AUTHOR
326
327Kennedy Clark, C<hkclark@gmail.com>
328
329Please report any errors, issues or suggestions to the author.
330
64ccd8a8 331Copyright 2006, Kennedy Clark, under Creative Commons License
332(L<http://creativecommons.org/licenses/by-nc-sa/2.5/>).
4d583dd8 333
4d583dd8 334