CakePHP中文手册【翻译】-组件(Component)

 

组件(Component

1

描述

组件是用来在某些特定的情况下辅助Controller的。它没有扩展Cake的核心库,而是把某些特殊的功能放到了组件里面。

IRC频道里,一个叫olle的小伙子曾经说过:组件是一个有点共享性质的控制源。我们发现这是一个非常好的定义。实际上最主要的目标就是可重用性。组件针对Controller,而Helper则针对view,而他们的最大不同之处在于组件封装了业务逻辑,而helper封装了表现逻辑。这点确实是非常重要的,对新手来说,当试图想达到重用的目标时,一个经常令人混淆的问题是:如果我打算做X,那么它应该是一个组件还是一个Helper呢?!很好,其实答案非常简单,X能做什么?如果它是业务逻辑,那么它就是一个组件,如果它是表现逻辑,那么它就是helper。如过它两者都有,那么它既是组件,也是helper。稍后的例子是一个验证系统。你想登入,登出,限制访问,以及测试用户对资源的权限(一个动作:编辑,增加,删除或者一个URL),这就是逻辑,因此这个验证系统应该是一个组件。但是当你登录系统后,你也可以将一些入口增加到主菜单上,这就是表现逻辑。

2

创建自己的组件

为了创建一个组件,在app/controllers/components/ directory目录下增加一个文件。

假设你创建了foo.php.在此文件里,你需要定义一个与文件名对应(文件名加上一个单词'Component'的类),因此,在这种情况下,接下来你应创建接的内容是:

一个简单的组件

class FooComponent extends Object
{
    var $someVar = null;
    var $controller = true;
 
    function startup(&$controller)
    {
        // This method takes a reference to the controller which is loading it.
        // Perform controller initialization here.
    }
 
    function doFoo()
    {
        $this->someVar = 'foo';
    }
}

现在,为了使用你自己的组件,你需要在你的controller定义中增加如下代码:

    var $components = array('Foo');

Controller里,现在你可以使用:

$this->Foo->doFoo();

组件可以访问Controller了,这个controller是通过上面的startup()方法加载的。在Controller::beforeFilter()后会立即调用此方法。它允许你在beforeFilter设置组件属性,组件可以在它的startup()方法上执行beforeFilter

为了在你的组件里使用model,你可以创建一个新的实例,如下:

   $foo =& new Foo();

你也可以在你的组件中使用其他的组件。你需要在你的组件里简单声明一下哪个组件是你想用的。在下面的实例里,它是一个Session(对话)组件。

var $components = array('Session');

3

公开你的组件

如果你认为你的组件对其他人有帮助,将它加到CakeForge. 如果此组件对社区逐渐开始有用,它可能会被包含到核心发布里去。

也可以访问snippet archive获取更多用户提交的组件。

Last updated:206-12-03
posted @ 2006-11-17 21:59  张太国  阅读(...)  评论(...编辑  收藏