Book-Chinese-MasterPerlToday
view release on metacpan or search on metacpan
lib/Book/Chinese/MasterPerlToday/Catalyst.pod view on Meta::CPAN
ææç 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.
è¿ç§ç±»åçæ©å±æ L<Catalyst::Controller::ActionRole>, L<Catalyst::Controller::SOAP>
è¿ç§ç±»åçæ©å±ä¸è¬ç´æ¥è¿åä¸ä¸ª ActionClass, æé
å C<create_action> æ¥è¿è¡æä½ã
=head3 å
¶å® (TraitFor)
å 为åºäºå¼ºå¤§ç Moose ç³»ç»ï¼æä»¥æä»¬ä¹å¯ä»¥ç¨ä¸äº Moose çæ¹æ³æ¥æ©å± Catalyst.
æ¯å¦åºäº L<CatalystX::RoleApplicator> ç L<Catalyst::TraitFor::Request::ProxyBase>, L<Catalyst::TraitFor::Request::BrowserDetect> (Catalyst::Plugin::Browser)
åºäº L<CatalystX::Component::Traits> ç L<Catalyst::Model::DBIC::Schema>
=head2 Session å Authentication
Catalyst çé«åº¦å¯æ©å±å声å¾å¤§ç¨åº¦ä¸æ¥èª Session, Authentication å View
=head3 Session
æä»¬æè¯´ç Session æçæ¯ L<Catalyst::Plugin::Session>
Session å为两个é¨å
=over 4
=item * State
State ä¸è¬æ¨èåªæ L<Catalyst::Plugin::Session::State::Cookie>, URI State ä¸å¤ªå®å
¨
=item * Store
Store æå¾å¤ç§ï¼ä½ å¯ä»¥åå° DBI (DBIC) éä¹å¯ä»¥åå° Memcached æ FastMmap
=back
æ°¸ä¹
ç»å½å¯ä»¥åé
L<Catalyst::Plugin::Session::DynamicExpiry>, 该模åéè¿æ¯æ¬¡é½æ´æ¹ cookie ç Expire æ¥ææ¥è·å¾é¿æ¶é´çå¨åã
å¦ç½è¯´ï¼è¯¥ Session 模å并䏿¯å¾å¥½ãå 为ç»ä¸ç API æ¥å£ç¼ºé·ï¼ä½ ä¸è½éè¿ä¸ä¸ª user_id æ¥å é¤è¯¥ç¨æ·ç session æ°æ®ãSession 模åçè¿ææ°æ®æ¸
çä¹éè¦èªå·±åã
使¯æ´ä½æ¥è¯´ï¼è¿æ¯åå°äºåºè¯¥éè¦åå°çã
æåï¼æä»¬ä»¥ L<Catalyst::Plugin::Session::State::Cookie> + L<Catalyst::Plugin::Session::Store::DBIC> 为ä¾ï¼è®²è¿°ä¸ç¹å
é¨ç¥è¯ã
=over 4
=item * sessionid
ç¬¬ä¸æ¥ï¼æä»¬å°å¨ç¨æ·è°ç¨ $c->session æ $c->sessionid æå
¶ä»çæ¶åï¼éè¿ C<get_session_id> æ¥è·å¾ sessionid
å¨ State::Cookie éï¼get_session_id ä»
ä»
æ¯æ¥è¯¢ $c->request->cookies->{$cookie_name};
=item * session
å¨å¾å° sessionid ä¹åï¼æä»¬å°å¨ç¨æ·è°ç¨ $c->session æ ->flash çæ¶åï¼éè¿ C<get_session_data> æ¥è·å¾ session çæ°æ®ãåæ¶ï¼æä»¬éè¿ L<Object::Signature> æ¥å¾å° session æ°æ®çä¸ä¸ªå½å signature
get_session_data 彿°å¨ L<Catalyst::Plugin::Session::Store::Delegate>, å®å°éè¿ C<session_store_delegate_key_to_accessor> æ¥è°ç¨å¾å° session("session:$sid"), expires("expires:$sid")
=item * request
ä¸è¿°æµç¨å½å¨è°ç¨ $c->session æ¶åçï¼å¦æä¸è°ç¨å°±ä¸ä¼éè¿ Store å¾å° session æ°æ®ã
request éä½ å¯ä»¥åªè¯»çè°ç¨ $c->session->{key} æè
å¯å delete $c->session->{far} æ $c->session->{bar} = 1;
=item * finalize_headers
finalize_headers 主è¦ç¨äºæ´æ¹ cookie ç Expire æ¶é´ã
个人认为è¿ä¸æ¯å¾å¥½ï¼å ä¸ºæ¯æ¬¡ request é½éè¦æ´æ¹ cookie ç Expire æ¶é´ï¼è¿å¾æµªè´¹ãä¸è¬æ¥è¯´ï¼è¦ä¹ cookie 为æµè§å¨è¿ç¨ cookie, è¦ä¹å°±ä¿åçä¹
ä¸ç¹ï¼ä¸ç¨æ¯æ¬¡ request 齿´æ° cookie ç Expire
=item * finalize_session
该è¿ç¨å¨ finalize_body ä¹åè°ç¨ã
é¦å
æä»¬å°ä½¿ç¨ L<Object::Signature> æ¥å¾å°å½å session æ°æ® ($c->_session) ç signature å¼ãç¶åè·ä¸é¢ get_session_data ä¹åç弿¯è¾ã
å¦æå¨ request ä¸åªæ¯åªè¯»çè°ç¨ $c->session çè¯ï¼é£è¿ä¸¤ä¸ªå¼åºå½æ¯ä¸æ ·çã
妿è¿è¡äºæ°å¢æ´æ¹æå é¤çè¯ï¼é£è¿ä¸¤ä¸ªå¼å°±ä¸ä¸æ ·äºãè¿æ¶åæä»¬å°±ä¼è°ç¨ Store éç C<store_session_data> æ¥æ´æ°æ°æ®ã
è¿éè¿æä¸ªæ´æ° session ç expires æ¶é´ãè¿ä¸ªè·ä¸é¢çæ´æ° cookie Expire æ¶é´ä¸æ ·ï¼æ¯æ¬¡ request é½ä¼è°ç¨ãæç¹æµªè´¹ã
=back
=head3 Authentication
Authentication æçæ¯ L<Catalyst::Plugin::Authentication>
Authentication å为两个é¨å
=over 4
=item * Credential
Credential æ¯æéè¿ä»ä¹æ¹å¼æ¥éªè¯è¿ä¸ª user æä¾çç»å½ä¿¡æ¯æ¯å¦æ£ç¡®ãæå¸¸ç¨çæ¯ L<Catalyst::Authentication::Credential::Password>, éè¿ password æ¥éªè¯ã
å
¶ä»çè¿æ OpenID, OAuth, Authen::Simple, HTTP, çè³ Flickr, FBConnectç
ææç Credential 模å齿¥æ sub authenticate
=item * Store
Store æ¯æå»åªéæ¾å°è¿ä¸ª user, æå¸¸ç¨çæ¯ L<Catalyst::Authentication::Store::DBIx::Class>
å
¶ä»çè¿æ LDAP, RDBO, KiokuDB, Jifty::DBI, Htpasswd ç
Store ä¸è¬å为 2 个模åï¼ä¸ä¸ªæ¯ä¸»æ¨¡åç¨äºå¦ä½æ¥æ¾ user ï¼éè¿ sub find_userï¼ï¼å¦ä¸ä¸ªæ¯ User 模åï¼è¯¥æ¨¡åå®ä¹äº from_session, for_session, get_object, AUTOLOAD çã
=back
æä»¬å°ä»¥ L<Catalyst::Authentication::Credential::Password> + L<Catalyst::Authentication::Store::DBIx::Class> 为ä¾ï¼è®²è¿°ä¸ç¹å
é¨ç¥è¯ã
( run in 1.155 second using v1.01-cache-2.11-cpan-5837b0d9d2c )