Book-Chinese-MasterPerlToday
view release on metacpan or search on metacpan
lib/Book/Chinese/MasterPerlToday/Catalyst.pod view on Meta::CPAN
=head2 æ©å± Catalyst
åé
L<Catalyst::Manual::ExtendingCatalyst>, L<Catalyst::Manual::Internals>, L<Catalyst::Manual::Plugins>
=head3 Plugin
Plugin å¨ 5.80 以åï¼ä¹è³ç°å¨ï¼æ¯ä½¿ç¨æå¹¿çä¸ç§æ©å±æ¹å¼ï¼è½ç¶æäº plugin å
¶å®æ²¡å¿
è¦æä¸ºä¸ä¸ª pluginã
Plugin éè¿æ´æ° Catalyst æµç¨ä¸çæäºåç¨åºï¼æè
ç» $c æ·»å ä¸äºå½æ°ã
éå¸¸æ´æ¹ Catalyst æµç¨ç plugin æ¯å¼å¾çã使¯å¦æä»
ä»
æ¯æ¹ä¾¿è°ç¨ï¼ç» $c æ·»å æä¸ªå½æ°ï¼æ¯é常没æå¿
è¦æä¸ºä¸ä¸ª plugin çã
Catalyst çæ´ä¸ªæµç¨å
æ¬ä¸¤ä¸ªé¨åã
=over 4
=item * setup
ä¸ä¸ªæ¯ setup é¨åï¼å¨ Catalyst å¯å¨çæ¶åè°ç¨ä¸æ¬¡ã
setup
setup_home
setup_log
setup_plugins
setup_dispatcher
setup_engine
setup_stats
setup_components
setup_actions
setup_finalize
ä¸è¿° setup_* 彿°æä»¬ä¸è¬ä¸è¿è¡æ¹å¨ï¼å¦æèªå®ä¹ç Plugin éè¦å¨å¯å¨çæ¶åæ£æ¥ config æåä¸äºåå§åçè¯ï¼ä¸è¬ç´æ¥æ¹ sub setup
use MRO::Compat;
sub setup {
my $c = shift;
$c->maybe::next::method(@_);
$c->setup_my_plugin_stuff;
}
ä¸è¿° setup plugin ä¾åæ L<Catalyst::Plugin::ConfigLoader>, L<Catalyst::Plugin::I18N> ç
L<Catalyst::Plugin::Server> 使ç¨äº setup_dispatcher
=item * request
å¦ä¸ä¸ªæ¯ request é¨åï¼æ¯ä¸ª url ç request é½è°ç¨ä¸æ¬¡ã
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
è¿ç§ plugin å¾å¤ã
L<Catalyst::Plugin::PageCache> ä½¿ç¨ dispatch+finalize
L<Catalyst::Plugin::Unicode> ä½¿ç¨ prepare_parameters+finalize
=back
=head3 Controller/View/Model
è¿ç§ç±»åçæ©å±ä¸è¬ç¨äºè¢« use base æ use parent
=over 4
=item * View
View æ¯æå¸¸è§çä¸ç§æ©å±ï¼æå¸¸ç¨çå¦ L<Catalyst::View::TT>, L<Catalyst::View::JSON>, TT::Alloy, PHP, Mason, Template::Declare, GraphViz, GD çãææç View æ©å±é½åºäº L<Catalyst::View>, å®ä»¬é½è¦ç sub process, å¹¶ä¸å¨å...
=item * Model
Model çæ©å±ä¸å¤ï¼æå¸¸ç¨çå½ç¶æ¯ L<Catalyst::Model::DBIC::Schema> å L<Catalyst::Model::Adaptor>. 大é¨åç Model é½è· storage æå
³ã
ææç Model æ©å±è¯æ³è·æä»¬å¹³å¸¸åçå¹¶æ ä»»ä½åºå«ï¼æä¸åçä»
ä»
å¨äºå
¬ç¨æ§ã
å Model æ©å±çæ¶åï¼ææ¶åæä»¬ä¼ç¨å° L<Catalyst::Component::InstancePerContext>, è¯¥æ¨¡åæ¯å¯¹ B<ACCEPT_CONTEXT> çä¸ä¸ªæå·§åºç¨ãå½ä½ çæ¨¡åéè¦å¨æ¯ä¸ª request éé½åºç¨ä¸äºä»£ç æ¶é常æç¨ã
=item * Controller
Controller çæ¨¡åå¹¶ä¸å¤ï¼æ¯ç«å
±äº«ç Controller å
容å¾çªãæ´å¤çæä»¬å°å¨ä¸æä¸è®²å°ã
ææåæ°çå½å± L<Catalyst::Controller::WrapCGI> 该模åè½è®© cgi èæ¬è¿è¡å¨ Catalyst éï¼è¿å°æå©äºä½ ç计å宿ï¼ä½ å¯ä»¥å¨ä»¥åæ°å½çæ¶é´å°è¯¥ cgi æ¹ä¸º Catalyst
å
¶ä»çæ L<Catalyst::Controller::REST>, L<Catalyst::Controller::reCAPTCHA>
=back
=head3 ActionClass
Action ç±»ä¼¼äº L<Moose> ç C<around>, æå¸¸è§ç ActionClass æ¯ L<Catalyst::Action::RenderView>
ææç Action é½åºäº L<Catalyst::Action> å¹¶ä¸éè¦ sub execute, åå§ç sub è°ç¨éè¿ L<MRO::Compat>, 大è´ç±»ä¼¼
sub execute {
my $self = shift;
my ($controller, $c ) = @_;
$self->next::method( @_ );
$self->next::method( @_ ); å¯ä»¥æ¾å° sub execute çä»»ä½å°æ¹ãè¿æå³ä½ å¯ä»¥å¨åå§ sub ä¹åå代ç ä¹å¯ä»¥å¨å
¶ä¹åã
=head3 Controller 屿§
å¦æä½ é
è¯»è¿ L<Catalyst::Controller> çæºç çè¯ï¼ä½ ä¼åç°ä¸äº _parse_*_attr ç sub ç±»å¦ _parse_Global_attr, _parse_Path_attr, _parse_Regex_attr, _parse_Chained_attr ç
æä»¬å¯ä»¥éè¿èªå®ä¹å±æ§åå¢å è¯¥å±æ§å¯¹åºç _parse_*_attr æ¥æ©å± Catalyst Controller.
( run in 0.693 second using v1.01-cache-2.11-cpan-b16cb0d3907 )