在我的CakePHP应用程序中,我希望构建一个插件或组件,在保存之前使用我的数据数组,查看是否有要上载的文件(我将检查名为attachment、image、thumb和gallery的字段)、上传它们、在需要时创建缩略图、在适当的表中写入条目以及使用条目ID修改数据数组。
我将在几个模型中使用它,因此我想要生成一个可重用的代码(我已经让它在AppModel中作为函数工作,但它非常混乱,我不喜欢它)。
我是应该制作一个连接到多个模型的组件,还是应该制作一个包含组件和模型的插件?
我更喜欢第二个选项,但我不知道如何将其提取出来(如何在插件组件中加载插件模型,或者在不需要重定向的情况下从插件组件调用插件控制器操作)。我也不知道这是不是正确的方法。
发布于 2013-12-24 16:48:48
这是一个非常常见的问题,因为了解组件、行为、插件和元素之间的区别需要一些时间。出于这个原因,我把这个答案做了一点解释--一旦你理解了它们,这个问题就是自我回答。
因为您提到了“先保存”触发器,这意味着您肯定会想要一种行为,因为它们具有可重用的回调方法。
问题是,“我是否需要比行为所能提供的更多的东西?”如果答案是肯定的,那么你可以制作一个插件,它可以包括你需要的任何其他东西。
如果答案是否定的,那么就没有足够的理由只为一个单一的行为制作一个完整的插件。
理解组件、行为、插件、(和元素)
组件
组件是控制器之间共享的逻辑包。
这是关于它的总结,真正-组件用于逻辑,您想要在控制器之间共享。这是“控制器”的关键。这些不用于与数据库相关的修改,因为这应该在模型中(每个MVC标准)。
组件的一个例子是,如果您想要在多个Controller中使用与文件上传相关的大量逻辑,则需要使用这些逻辑。它不是直接与数据库相关的(这将是一个模型),也不是用于创建HTML (参见视图) --这是您希望共享w/其他控制器的常见逻辑。
行为
模型行为是组织CakePHP模型中定义的一些功能的一种方法。
行为通常用于允许多个模型共享回调方法。例如,“可携带性行为”可能有一个"beforeSave()“回调,它接受"name”(或其他)字段中的任何内容,并将其转换为弹格并将其放入“段塞”字段。然后,任何作为行为的模型,只要保存下来,就会自动得到一个弹状体。
插件
插件是控制器、模型和视图作为打包应用程序插件发布的组合,其他人可以在其CakePHP应用程序中使用这些插件。
不管您想做什么,插件总是一个选项,但是插件的要点通常是将模型、视图、控制器、组件、behaviors...etc打包成可以跨多个项目使用的东西的方法。如果你确定这些东西只用于一个项目,你就可以在项目本身中拥有相同的文件--不需要插件。但是,如果您希望它易于重用,那么您可以将它们放入插件中。
元素
元素基本上是一个迷你视图,可以包含在其他视图中,在布局中,甚至在其他元素中。元素可以用于提高视图的可读性,将重复元素的呈现放在自己的文件中。
元素是其中唯一与视图相关的元素。例如,一个小模块框显示了您想要放置在很多页面上的联系人表单(可能在不同的位置)。
如果它出现在每个页面上,您可能会考虑将其包含在布局文件中,但是如果它可能存在或不存在,并且/或位于不同的location..etc中,那么元素是生成可重用视图代码的好方法。
https://stackoverflow.com/questions/20763470
复制相似问题