0

我在理解组件、实用程序和行为之间的区别时遇到了问题。我读了食谱,但它只对我有部分帮助。

例如——我想在上传时调整/裁剪图像。我将使用许多与不同模型和控制器/动作相关的不同形式。

显然我需要用scaleresizesaveImage和其他有用的方法编写一个类。我还需要能够从不同的地方使用这种方法。

我的问题是 - 放置此代码的正确位置在哪里?有人可以为我提供一些关于组件、实用程序和行为之间核心区别的简单示例吗?因为对我来说组件和实用程序看起来非常相似。

4

2 回答 2

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

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

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

在您的情况下,图像处理逻辑很可能属于 Component 或 Utility 类,您可以选择以任何一种方式实现它。就个人而言,我会编写一个组件,因为您不太可能在控制器之外使用图像处理逻辑。

编辑:您可能还考虑查找和使用某人已经编写的现有组件,例如我在大约 2 分钟的 Google 搜索中找到了ImageToolImage ResizerImage Upload & ResizerThumbnail 。

于 2012-12-10T18:58:37.747 回答
1

行为是您放置应该跨多个模型重用的代码的地方组件是您放置将在多个控制器中使用的代码的地方,而助手是您放置将在多个视图中使用的代码的地方

这就是基本的崩溃。

由于控制器负责应用程序逻辑,因此将上传器/缩放器构建到组件中似乎是最有意义的。

如果您需要修改数据的访问方式或从数据库返回的方式,那将是一种行为(因为它会影响模型层)

如果您需要创建一些可重用的代码来生成 HTML 或某种类型的视图输出,那将是一个助手。

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

我通过执行以下操作将此组件添加到我的控制器中:

 var components = array('Upload');

然后我可以通过执行以下操作在我的控制器中使用它:

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

显然,如何实现组件的细节取决于您。

希望有帮助。

于 2012-12-10T18:51:32.687 回答