2012-12-10 111 views
0

我在理解组件,实用程序和行为之间的差异时遇到了问题。 我看了食谱,但它只帮助了我一部分。组织CakePHP代码

例如 - 我想在上传时调整大小/裁切图像。 我将使用与不同模型和控制器/操作相关的多种不同形式。

很显然,我需要写一个类规模调整saveImage和其他有用的方法。 我也需要能够在不同的地方使用这种方法。

我的问题是 - 哪里是正确的地方放这段代码?有人能提供一些关于组件,效用和行为之间核心差异的简单例子吗?因为对我来说组件和实用程序看起来非常相似

回答

2
  • 行为是适用于模型逻辑的包。
  • 组件是逻辑包,适用于控制器
  • 实用程序是通用库,不一定适用于MVC的任何特定部分。

实用程序和行为/组件之间的主要区别是:实用工具类不会延长核心MVC类,因而不会自动接收钩到他们的父类的请求周期。例如,在组件中,您可以实现一个beforeRender()函数,该函数在控制器每次调用控制器时自动地呈现其布局/视图之前会被调用。

此外,实用程序类必须实例化并在使用前分配给变量:$myUtil = new MyUtility(); $myUtil->blah() - 行为/组件/帮助程序在加载到类中时可以实例化,并且可以用$this->MyComponent->blah()引用。

就你而言,图像处理逻辑很可能属于Component或Utility类,你可以选择实现它。就个人而言,我会去写一个Component,因为你不太可能利用控制器之外的图像处理逻辑。

编辑:您还可以考虑查找和使用已经有人写了一个现有的组件,例如我发现ImageToolImage ResizerImage Upload & ResizerThumbnail在约2分钟的谷歌搜索。

+0

我会看看这些组件。但首先我想了解它是如何工作的,并学习如何创建类似的功能。 :)你的回答非常有帮助,谢谢! – Derp

0

行为的地方,你把那应该跨多个模型中重用代码 组件都放在什么地方的代码,将跨越多个控制器 和助手,在那里你把代码中,将跨越多个视图

使用这是基本的崩溃。

由于控制器负责应用程序逻辑,因此您最好将您的上传器/缩放器构建到组件中。

如果需要修改数据如何被访问,或从数据库中返回,这将是一个行为(因为它影响的模型层)

如果你需要创建生成HTML或一些一些可重用的代码类型的视图输出,这将是一个帮手。

用于上传,缩放和调整图像大小的示例。我会把它变成一个组件。例如,我有一个名为UploadComponent.php的组件,用于上传,保存并创建缩略图图像。

我做这个组件添加到我的控制器:

var components = array('Upload'); 

,然后我可以通过以下操作使用它在我的控制器:你如何实现你的组件

$this->Upload->createThumbnail(200, 200); 

细节显然,取决于你。

希望有所帮助。

+0

是的,谢谢! – Derp