gpt4 book ai didi

php - 我使用什么——插件、组件或行为?

转载 作者:可可西里 更新时间:2023-11-01 00:09:18 25 4
gpt4 key购买 nike

在我的 CakePHP 应用程序中,我想构建一个插件或组件,在保存之前获取我的数据数组,查看是否有要上传的文件(我将检查名为 attachment 的字段,imagethumbgallery),上传它们,根据需要创建缩略图,在适当的表中写入条目并使用条目 ID 修改数据数组.

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

我应该制作一个连接到多个模型的组件,还是应该制作一个包含组件和模型的插件?

我更喜欢第二个选项,但我不知道如何将其提取出来(如何在插件组件中加载插件模型,或从插件组件调用插件 Controller 操作而不重定向)。我也不知道这样做是否正确。

最佳答案

这是一个非常常见的问题,因为要了解码件、行为、插件和元素之间的区别需要花费一些时间。出于这个原因,我稍微扩展了这个答案来解释它们 - 一旦你理解了它们,这个问题就是 self 回答。

因为您提到了“保存前”触发器,这意味着您肯定会想要一个行为,因为它们具有可重用的回调方法。

接下来的问题是,“除了行为所能提供的,我还需要什么吗?”。如果答案是肯定的,那么您可以制作一个插件,其中可以包含您需要的任何其他内容。

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


了解码件、行为、插件(和元素)

Components :

Components are packages of logic that are shared between controllers.

这就是真正的总结 - 组件用于您希望在 Controller 之间共享的逻辑。这就是“ Controller ”的关键。这些不用于与数据库数据相关的修改,因为它应该在模型中(根据 MVC standards )。

组件的一个例子是,如果你有大量与文件上传相关的逻辑,你想在多个 Controller 中使用。它不直接与数据库相关(这将是一个模型),也不用于创建 HTML(请参阅 Views)- 这是您希望与其他 Controller 共享的通用逻辑。

Behaviors :

Model behaviors are a way to organize some of the functionality defined in CakePHP models.

行为最常用于允许多个模型共享 callback methods .例如,“Sluggable Behavior”可以有一个“beforeSave()”回调,它接受“name”(或其他)字段中的任何内容并将其变成一个 slug 并将其放入“slug”字段。然后,任何充当该行为的模型在保存时都会自动填充一个 slug。

Plugins

Plugins are a combination of controllers, models, and views released as a packaged application plugin that others can use in their CakePHP applications.

无论您尝试做什么,插件始终是一个选项,但插件的重点通常是一种将模型、 View 、 Controller 、组件、行为等打包到您可以使用的东西中的方法跨越多个项目。如果您确定这些东西只适用于一个项目,那么您可以在项目本身中拥有这些相同的文件——不需要插件。但是,如果您希望它易于重用,那么您可以将它们放入插件中。

Elements

An element is basically a mini-view that can be included in other views, in layouts, and even within other elements. Elements can be used to make a view more readable, placing the rendering of repeating elements in its own file.

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

如果它出现在每一页上,您可能会考虑将它包含在您的 Layout file 中。 ,但如果它可能存在也可能不存在,和/或可能位于不同位置等,那么元素是制作可重用 View 代码的好方法。

关于php - 我使用什么——插件、组件或行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20763470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com