Catalyst::Manual::Internals.3pm

Langue: en

Version: 2008-11-04 (ubuntu - 07/07/09)

Section: 3 (Bibliothèques de fonctions)

NAME

Catalyst::Manual::Internals - Catalyst Internals

DESCRIPTION

This document provides an overview of the internals of Catalyst. As Catalyst is still developing rapidly, details may become out of date: please treat this as a guide, and look at the source for the last word.

The coverage is split into initialization and request lifecycle.

Initialization

Catalyst initializes itself in two stages (I may be wrong in some of the details here - AF):
1.
When the Catalyst module is imported in the main application module it evaluates any options ("-Debug", "-Engine=XXX") and loads any specified plugins, making the application module inherit from the plugin classes. It also sets up a default log object and ensures that the application module inherits from "Catalyst" and from the selected specialized Engine module.
2.
When the application module makes the first call to "__PACKAGE__->action()" (implemented in "Catalyst::Engine"), Catalyst automatically loads all components it finds in the $class::Controller, $class::C, $class::Model, $class::M, $class::View and $class::V namespaces (using "Module::Pluggable::Fast"). A table of actions is built up and added to on subsequent calls to "action()".

Request Lifecycle

For each request Catalyst builds a context object, which includes information about the request, and then searches the action table for matching actions.

The handling of a request can be divided into three stages: preparation of the context, processing of the request, and finalization of the response. These are the steps of a Catalyst request in detail; every step can be overloaded to extend Catalyst.

     handle_request
       prepare
         prepare_request
         prepare_connection
         prepare_query_parameters
         prepare_headers
         prepare_cookies
         prepare_path
         prepare_body (unless parse_on_demand)
           prepare_body_parameters
           prepare_parameters
           prepare_uploads
         prepare_action
       dispatch
       finalize
         finalize_uploads
         finalize_error (if one happened)
         finalize_headers
           finalize_cookies
         finalize_body
 
 

These steps are normally overloaded from engine classes, and may also be extended by plugins. Extending means using multiple inheritance with NEXT.

The specialized engine classes populate the Catalyst request object with information from the underlying layer ("Apache::Request" or "CGI::Simple") during the prepare phase, then push the generated response information down to the underlying layer during the finalize phase.

AUTHOR

Sebastian Riedel, "sri@oook.de" This program is free software, you can redistribute it and/or modify it under the same terms as Perl itself.