Catalyst::Manual::Tutorial - Catalyst Tutorial: Overview The Catalyst framework is a flexible and comprehensive environment for quickly building high-functionality web applications. This tutorial is designed to provide a rapid introduction to its basics and its most commonly used features while focusing on real-world best practices. The tutorial is divided into the following sections: NOTE: CLICK THESE LINKS TO JUMP TO CHAPTERS (the index links above only navigate inside this page). Introduction Catalyst Basics Basic CRUD Authentication Authorization Debugging Testing Advanced CRUD Appendices A tarball of the final application is available at <http://dev.catalyst.perl.org/repos/Catalyst/trunk/examples/Tutorial/Final_Tarball/MyApp.tgz>.

Part 1: Introduction
VERSIONS AND CONVENTIONS USED IN THIS TUTORIAL CATALYST INSTALLATION DATABASES WHERE TO GET WORKING CODE

Part 2: Catalyst Basics
CREATE A CATALYST PROJECT CREATE A SQLITE DATABASE EDIT THE LIST OF CATALYST PLUGINS DATABASE ACCESS WITH DBIx::Class Create a DBIC Schema File Create the DBIC ``Result Source'' Files Use Catalyst::Model::DBIC::Schema to Load the Model Class CREATE A CATALYST CONTROLLER CATALYST VIEWS Create a Catalyst View Using TTSite Using RenderView for the Default View Globally Customize Every View Create a TT Template Page RUN THE APPLICATION USING THE DEFAULT TEMPLATE NAME

Part 3: Basic CRUD
FORMLESS SUBMISSION Include a Create Action in the Books Controller Include a Template for the url_create Action: Try the url_create Feature MANUALLY BUILDING A CREATE FORM Add a Method to Display the Form Add a Template for the Form Add Method to Process Form Values and Update Database Test Out the Form A SIMPLE DELETE FEATURE Include a Delete Link in the List Add a Delete Action to the Controller Try the Delete Feature

Part 4: Authentication
BASIC AUTHENTICATION Add Users and Roles to the Database Add User and Role Information to DBIC Schema Create New ``Result Source Objects'' Sanity-Check Reload of Development Server Include Authentication and Session Plugins Configure Authentication Add Login and Logout Controllers Add a Login Form TT Template Page Add Valid User Check Displaying Content Only to Authenticated Users Try Out Authentication USING PASSWORD HASHES Get a SHA-1 Hash for the Password Switch to SHA-1 Password Hashes in the Database Enable SHA-1 Hash Passwords in Catalyst::Plugin::Authentication::Store::DBIC Try Out the Hashed Passwords

Part 5: Authorization
BASIC AUTHORIZATION Update Plugins to Include Support for Authorization Add Config Information for Authorization Add Role-Specific Logic to the ``Book List'' Template Limit Books::add to admin Users Try Out Authentication And Authorization ENABLE ACL-BASED AUTHORIZATION Add the Catalyst::Plugin::Authorization::ACL Plugin Add ACL Rules to the Application Class Add a Method to Handle Access Violations

Part 6: Debugging
LOG STATEMENTS RUNNING CATALYST UNDER THE PERL DEBUGGER DEBUGGING MODULES FROM CPAN

Part 7: Testing
RUNNING THE "CANNED" CATALYST TESTS RUNNING A SINGLE TEST ADDING YOUR OWN TEST SCRIPT SUPPORTING BOTH PRODUCTION AND TEST DATABASES

Part 8: Advanced CRUD
HTML::WIDGET FORM CREATION Add the HTML::Widget Plugin Add a Form Creation Helper Method Add Actions to Display and Save the Form Update the CSS Create a Template Page To Display The Form Add Links for Create and Update via HTML::Widget Test The <HTML::Widget> Create Form HTML::WIDGET VALIDATION AND FILTERING Add Constraints and Filters to the Widget Creation Method Rebuild the Form Submission Method to Include Validation Try Out the Form Enable DBIx::Class::HTMLWidget Support Add DBIx::Class::HTMLWidget to DBIC Model Use populate_from_widget in hw_create_do

Part 9: Appendices
APPENDIX 1: CUT AND PASTE FOR POD-BASED EXAMPLES "Un-indenting" with Vi/Vim "Un-indenting" with Emacs APPENDIX 2: USING MYSQL AND POSTGRESQL MySQL PostgreSQL APPENDIX 3: IMPROVED HASHING SCRIPT This tutorial would not have been possible without the input of many different people in the Catalyst community. In particular, the primary author would like to thank: Sebastian Riedel for founding the Catalyst project. The members of the Catalyst Core Team for their tireless efforts to advance the Catalyst project. Although all of the Core Team members have played a key role in this tutorial, it would have never been possible without the critical contributions of: Matt Trout, for his unfathomable knowledge of all things Perl and Catalyst (and his willingness to answer lots of my questions); Jesse Sheidlower, for his incredible skill with the written word and dedication to improving the Catalyst documentation; and Yuval Kogman, for his work on the Catalyst "Auth & Authz" plugins (the original focus of the tutorial) and other key Catalyst modules. Other Catalyst documentation folks like Kieren Diment, Gavin Henry, and Jess Robinson (including their work on the original Catalyst tutorial). Everyone on #catalyst and #catalyst-dev. People who have emailed me with corrections and suggestions on the tutorial. As of the most recent release, this include: Florian Ragwitz, Mauro Andreolini, Jim Howard, Giovanni Gigante, William Moreno, Bryan Roach, Ashley Berlin, David Kamholz, Kevin Old, Henning Sprang, Jeremy Jones, David Kurtz, and Ingo Wichmann. Kennedy Clark, "hkclark@gmail.com" Please report any errors, issues or suggestions to the author. The most recent version of the Catalyst Tutorial can be found at <http://dev.catalyst.perl.org/repos/Catalyst/trunk/Catalyst-Runtime/lib/Catalyst/Manual/Tutorial/>. Copyright 2006, Kennedy Clark, under Creative Commons License (<http://creativecommons.org/licenses/by-nc-sa/2.5/>).