我在理解组件,实用程序和行为之间的区别时遇到了问题。 我读了Cookbook,但它只帮助了我一部分。
例如 - 我想在上传时调整图片大小。 我将使用与不同模型和控制器/操作相关的许多不同形式。
显然,我需要编写一个具有 scale ,调整大小, saveImage 和其他有用方法的类。 我还需要能够在不同的地方使用这种方法。
我的问题是 - 放置此代码的正确位置在哪里?有人能为我提供一些关于组件,实用程序和行为之间核心差异的简单示例吗?因为对我来说,组件和实用程序看起来非常相似。
答案 0 :(得分:2)
实用程序和行为/组件之间的主要区别在于实用程序类不扩展核心MVC类,因此不会自动接收其父类的请求周期中的挂钩。例如,在Component中,您可以实现一个beforeRender()
函数,该函数会在控制器每次调用该控制器时自动呈现其布局/视图之前调用。
此外,必须实例化实用程序类并在使用前将其分配给变量:$myUtil = new MyUtility(); $myUtil->blah()
- 行为/组件/帮助程序在加载到类中时实例化,并且可以使用$this->MyComponent->blah()
引用
在您的情况下,图像处理逻辑很可能属于Component或Utility类,您可以选择以任一方式实现它。就个人而言,我会编写一个Component,因为你不太可能在控制器之外使用图像处理逻辑。
修改:您可能还会考虑查找和使用某人已撰写的现有组件,例如我找到了ImageTool,Image Resizer,Image Upload & Resizer,在Google搜索的大约2分钟内发现Thumbnail。
答案 1 :(得分:0)
行为是您放置应在多个模型中重用的代码的地方 组件是放置将在多个控制器上使用的代码的位置 和助手是您放置将在多个视图中使用的代码的地方
这是基本故障。
由于控制器负责应用程序逻辑,因此将上传器/缩放器构建到组件中似乎最有意义。
如果您需要修改数据的访问方式或从数据库返回数据,那将是一种行为(因为它会影响模型层)
如果您需要创建一些可重用的代码来生成HTML或某种类型的视图输出,那将是一个帮手。
上传,缩放和调整图片大小的示例。我会把它变成一个组件。例如,我有一个名为UploadComponent.php的组件,用于上传,保存和创建缩略图。
我通过执行以下操作将此组件添加到控制器:
var components = array('Upload');
然后我可以通过执行以下操作在我的控制器中使用它:
$this->Upload->createThumbnail(200, 200);
显然,您实施组件的详细信息取决于您。
希望有所帮助。