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 @   张太国  阅读(2891)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?

点击右上角即可分享
微信分享提示