在我的CakePHP应用程序中,我想构建一个插件或组件,在保存之前将采用我的数据数组,看看是否有要上传的文件(我将检查名为attachment
的字段,{{1} },image
和thumb
),上传它们,根据需要创建缩略图,在相应的表中写入条目,并使用条目ID修改数据数组。
我将在几个模型中使用它,所以我想制作一个可重用的代码(我已经将它作为AppModel中的函数工作,但它非常混乱,我不喜欢它)。
我应该创建一个可以连接到多个模型的组件,还是应该创建一个包含组件和模型的插件?
我更喜欢第二个选项,但我不知道如何解决这个问题(如何在插件组件中加载插件模型,或者从插件组件调用插件控制器操作而不重定向)。我也不知道这是否是正确的方法。
答案 0 :(得分:9)
这是一个非常常见的问题,因为需要一些时间来了解组件,行为,插件和元素之间的区别。出于这个原因,我将这个答案扩展到一点来解释它们 - 一旦你理解了它们,这个问题就是自我回答。
由于您提到“保存前”触发器,这意味着您肯定会想要一个行为,因为它们具有可重复使用的回叫方法。
接下来的问题是,“我需要的东西比行为能提供的更多吗?”。如果答案是肯定的,那么你可以制作一个插件,其中可以包含你需要的任何其他东西。
如果答案是否定的,那么就没有太多理由为一个行为制作一个完整的插件。
了解组件,行为,插件(和元素)
<强> Components 强>
组件是控制器之间共享的逻辑包。
真正总结一下 - 组件用于您希望在控制器之间共享的逻辑。这是“控制器”的关键。这些不用于与数据库数据相关的修改,因为它应该在模型中(每MVC standards)。
组件的一个示例是,如果您要在多个Controller中使用大量与文件上载相关的逻辑。它不是直接与数据库相关的(这将是一个模型),它不是用于创建HTML(参见Views) - 它是你想要与其他控制器共享的常见逻辑。
<强> Behaviors 强>
模型行为是组织某些功能的一种方式 在CakePHP模型中定义。
行为最常用于允许多个模型共享callback methods。例如,“Sluggable Behavior”可以具有“beforeSave()”回调,该回调接受“name”(或其他)字段中的任何内容并将其转换为slug并将其放入“slug”字段中。然后,任何作为该行为的模型将在它保存时自动填充一个slug。
<强> Plugins 强>
插件是发布的控制器,模型和视图的组合 作为其他人可以在CakePHP中使用的打包应用程序插件 应用
无论你想要做什么,插件总是一个选项,但插件的重点通常是将模型,视图,控制器,组件,行为......等包装成你可以使用的东西的方法跨多个项目。如果您确定这些内容仅适用于一个项目,那么您可以在项目本身中拥有相同的文件 - 无需插件。但如果您有可能轻松地重复使用它,那么您可以将它们放入插件中。
<强> Elements 强>
元素基本上是可以包含在其他元素中的迷你视图 视图,布局,甚至其他元素。元素可以 用于使视图更具可读性,放置重复的渲染 元素在自己的文件中。
元素是与View相关的唯一元素。例如,一个小模块框,显示您想要放在许多页面上的联系表单(可能在不同的位置)。
如果它出现在每个页面上,您可能会考虑将其包含在Layout file中,但如果它可能存在或可能不存在,和/或可能位于不同的位置......等等,那么元素是制作可重复使用的视图代码的好方法。