我该怎么用 - 插件,组件或行为?

Ска*_* от 3 php cakephp

在我的CakePHP的应用程序,我想建立一个插件或组件时,它把我的数据数组保存前,看看是否有被上传(我会检查是否存在名为字段的文件attachment,image,thumbgallery),上传这些照片,如果需要创建缩略图,在相应的表中写入条目,并使用条目ID修改数据数组.

我将在几个模型中使用它,所以我想制作一个可重用的代码(我已经将它作为AppModel中的函数工作,但它非常混乱,我不喜欢它).

我应该创建一个可以连接到多个模型的组件,还是应该创建一个包含组件和模型的插件?

我更喜欢第二个选项,但我不知道如何解决这个问题(如何在插件组件中加载插件模型,或者从插件组件调用插件控制器操作而不重定向).我也不知道这是否是正确的做法.

Dav*_*ave 9

这是一个非常常见的问题,因为需要一些时间来了解组件,行为,插件和元素之间的区别.出于这个原因,我将这个答案扩展到一点来解释它们 - 一旦你理解了它们,这个问题就是自我回答.

由于您提到"保存前"触发器,这意味着您肯定会想要一个行为,因为它们具有可重复使用的回调方法.

那么问题是,"我还需要比行为所能提供的更多的东西吗?".如果答案是肯定的,那么您可以制作一个插件,其中可以包含您需要的任何其他内容.

如果答案是否定的,那么就没有太多理由为一个行为制作一个完整的插件.


理解组件,行为,插件,(和元素)

组件:

组件是控制器之间共享的逻辑包.

这真的总结了 - 组件用于你想在控制器之间共享的逻辑.这是"控制器"的关键.这些不用于与数据库数据相关的修改,因为它应该在模型中(根据MVC标准).

组件的一个示例是,如果您要在多个Controller中使用大量与文件上载相关的逻辑.它不是直接与数据库相关的(这将是一个模型),它不是用于创建HTML(参见视图) - 它是你想要与其他控制器共享的常见逻辑.

行为:

模型行为是组织CakePHP模型中定义的某些功能的一种方式.

行为最常用于允许多个模型共享回调方法.例如,"Sluggable Behavior"可以具有"beforeSave()"回调,该回调接受"name"(或其他)字段中的任何内容并将其转换为slug并将其放入"slug"字段中.然后,任何作为该行为的模型将在它保存时自动获取一个slug.

插件

插件是控制器,模型和视图的组合,作为打包的应用程序插件发布,其他人可以在CakePHP应用程序中使用.

无论你想做什么,插件总是一个选项,但插件的重点通常是将模型,视图,控制器,组件,行为等打包成可以在多个项目中使用的东西. .如果您确定这些内容仅适用于一个项目,那么您可以在项目本身中拥有相同的文件 - 无需插件.但是,如果您有可能轻松地重复使用它,那么您可以将它们放入插件中.

分子

元素基本上是一个迷你视图,可以包含在其他视图中,布局中,甚至包含在其他元素中.元素可用于使视图更具可读性,将重复元素的呈现放在其自己的文件中.

元素是与View相关的唯一元素.例如,一个小模块框,显示您想要放在许多页面上的联系表单(可能在不同的位置).

如果它在每个页面上,您可能会考虑将它包含在您的布局文件中,但如果它可能存在或可能不存在,和/或可能位于不同的位置..等等,那么元素是一种好方法制作可重复使用的View代码.