Catalyst::Manual::Internals - Catalyst Internals |
Catalyst::Manual::Internals - Catalyst Internals
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.
Catalyst initializes itself in two stages (I may be wrong in some of the details here - AF):
-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.
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()
.
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 the NEXT manpage.
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.
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.
Catalyst::Manual::Internals - Catalyst Internals |