Fayland 林 > Book-Chinese-MasterPerlToday-0.02 > Book::Chinese::MasterPerlToday::Catalyst

Download:
Book-Chinese-MasterPerlToday-0.02.tar.gz

Annotate this POD

View/Report Bugs
Source  

NAME ^

Book::Chinese::MasterPerlToday::Catalyst - Catalyst Framework

DESCRIPTION ^

本章主要介绍如何使用 Catalyst 来构建一个程序。

    cpan> install Catalyst::Runtime
    cpan> install Catalyst::Devel
    cpan> install Catalyst::Manual

详尽的文档请参阅 Catalyst::Manual

前言

所有模块或工具的用意都在于简化您任务所需的代码。

Catalyst 采用当前最流行的 MVC 结构。

扩展 Catalyst

参阅 Catalyst::Manual::ExtendingCatalyst, Catalyst::Manual::Internals, Catalyst::Manual::Plugins

Plugin

Plugin 在 5.80 以前(乃至现在)是使用最广的一种扩展方式,虽然有些 plugin 其实没必要成为一个 plugin。

Plugin 通过更新 Catalyst 流程中的某些子程序,或者给 $c 添加一些函数。

通常更改 Catalyst 流程的 plugin 是值得的。但是如果仅仅是方便调用,给 $c 添加某个函数,是非常没有必要成为一个 plugin 的。

Catalyst 的整个流程包括两个部分。

Controller/View/Model

这种类型的扩展一般用于被 use base 或 use parent

ActionClass

Action 类似于 Moosearound, 最常见的 ActionClass 是 Catalyst::Action::RenderView

所有的 Action 都基于 Catalyst::Action 并且需要 sub execute, 原始的 sub 调用通过 MRO::Compat, 大致类似

  sub execute {
    my $self = shift;
    my ($controller, $c ) = @_;
    
    $self->next::method( @_ );

$self->next::method( @_ ); 可以放到 sub execute 的任何地方。这意味你可以在原始 sub 之前写代码也可以在其之后。

Controller 属性

如果你阅读过 Catalyst::Controller 的源码的话,你会发现一些 _parse_*_attr 的 sub 类如 _parse_Global_attr, _parse_Path_attr, _parse_Regex_attr, _parse_Chained_attr 等

我们可以通过自定义属性和增加该属性对应的 _parse_*_attr 来扩展 Catalyst Controller.

这种类型的扩展有 Catalyst::Controller::ActionRole, Catalyst::Controller::SOAP

这种类型的扩展一般直接返回一个 ActionClass, 或配合 create_action 来进行操作。

其它 (TraitFor)

因为基于强大的 Moose 系统,所以我们也可以用一些 Moose 的方法来扩展 Catalyst.

比如基于 CatalystX::RoleApplicatorCatalyst::TraitFor::Request::ProxyBase, Catalyst::TraitFor::Request::BrowserDetect (Catalyst::Plugin::Browser)

基于 CatalystX::Component::TraitsCatalyst::Model::DBIC::Schema

Session 和 Authentication

Catalyst 的高度可扩展名声很大程度上来自 Session, Authentication 和 View

Session

我们所说的 Session 指的是 Catalyst::Plugin::Session

Session 分为两个部分

永久登录可以参阅 Catalyst::Plugin::Session::DynamicExpiry, 该模块通过每次都更改 cookie 的 Expire 日期来获得长时间的储存。

坦白说,该 Session 模块并不是很好。因为统一的 API 接口缺陷,你不能通过一个 user_id 来删除该用户的 session 数据。Session 模块的过期数据清理也需要自己做。

但是整体来说,还是做到了应该需要做到的。

最后,我们以 Catalyst::Plugin::Session::State::Cookie + Catalyst::Plugin::Session::Store::DBIC 为例,讲述一点内部知识。

Authentication

Authentication 指的是 Catalyst::Plugin::Authentication

Authentication 分为两个部分

我们将以 Catalyst::Authentication::Credential::Password + Catalyst::Authentication::Store::DBIx::Class 为例,讲述一点内部知识。

FAQ

Catalyst 例子

资源

AUTHOR ^

Fayland Lam, <fayland at gmail.com>

COPYRIGHT & LICENSE ^

Copyright (c) 2009 Fayland Lam

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

syntax highlighting: