- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在我的 CakePHP 应用程序中,我想构建一个插件或组件,在保存之前获取我的数据数组,查看是否有要上传的文件(我将检查名为 attachment
的字段,image
、thumb
和 gallery
),上传它们,根据需要创建缩略图,在适当的表中写入条目并使用条目 ID 修改数据数组.
我将在几个模型中使用它,所以我想制作一个可重用的代码(我已经将它作为 AppModel 中的函数使用,但它非常困惑,我不喜欢它)。
我应该制作一个连接到多个模型的组件,还是应该制作一个包含组件和模型的插件?
我更喜欢第二个选项,但我不知道如何将其提取出来(如何在插件组件中加载插件模型,或从插件组件调用插件 Controller 操作而不重定向)。我也不知道这样做是否正确。
最佳答案
这是一个非常常见的问题,因为要了解码件、行为、插件和元素之间的区别需要花费一些时间。出于这个原因,我稍微扩展了这个答案来解释它们 - 一旦你理解了它们,这个问题就是 self 回答。
因为您提到了“保存前”触发器,这意味着您肯定会想要一个行为,因为它们具有可重用的回调方法。
接下来的问题是,“除了行为所能提供的,我还需要什么吗?”。如果答案是肯定的,那么您可以制作一个插件,其中可以包含您需要的任何其他内容。
如果答案是否定的,那么就没有太多理由为单个行为制作整个插件。
了解码件、行为、插件(和元素)
Components are packages of logic that are shared between controllers.
这就是真正的总结 - 组件用于您希望在 Controller 之间共享的逻辑。这就是“ Controller ”的关键。这些不用于与数据库数据相关的修改,因为它应该在模型中(根据 MVC standards )。
组件的一个例子是,如果你有大量与文件上传相关的逻辑,你想在多个 Controller 中使用。它不直接与数据库相关(这将是一个模型),也不用于创建 HTML(请参阅 Views)- 这是您希望与其他 Controller 共享的通用逻辑。
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 are a combination of controllers, models, and views released as a packaged application plugin that others can use in their CakePHP applications.
无论您尝试做什么,插件始终是一个选项,但插件的重点通常是一种将模型、 View 、 Controller 、组件、行为等打包到您可以使用的东西中的方法跨越多个项目。如果您确定这些东西只适用于一个项目,那么您可以在项目本身中拥有这些相同的文件——不需要插件。但是,如果您希望它易于重用,那么您可以将它们放入插件中。
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/
我在互联网上搜索了很多小时,但没有找到满意的结果,所以 -VSTO Addin 和 COM Addin(我们作为类库项目制作并使用 Excel 对象)之间有什么区别?VSTO 项目是否有任何限制,例如
我在互联网上搜索了很多小时,但没有找到满意的结果,所以 -VSTO Addin 和 COM Addin(我们作为类库项目制作并使用 Excel 对象)之间有什么区别?VSTO 项目是否有任何限制,例如
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我正在寻找有关如何构建可扩展 WCF 服务器(具有动态加载的服务)的建议,最好使用 System.Addins 或 MEF。 服务器应托管实现最小“插件”API(StartService/StopSe
有没有一种方法可以使用加载浏览器扩展/插件/插件的 headless 浏览器(即 PhantomJS、Selenium)来运行自动测试? 更具体地说,我想模拟广告拦截器(如 Ghostery、ad-b
我是 gradle 的新手,我使用 artifactory 作为我的 repo 服务器。我在网上查看了如何将我的项目发布到我的 repo 服务器,发现我可以使用 maven-publish 或使用 a
我想禁用某些状态的点击/事件,并仅使少数状态可点击。我通读了http://newsignature.github.io/us-map/处的文档,并且找不到与此问题相关的任何内容。 最佳答案 http:
据我了解,在Intellij中使用idea插件打开Maven构建的项目并不是最好的方法,即调用: mvn idea:idea 但是直接打开pom文件(Intellij有默认的Maven插件);同样的事
使用Artifactory plugin对于 Jenkins pipeline 来说是一种幸福,只要遵循文档就可以了。但后来我介绍了Maven Flatten plugin解析父模块和子模块 mvn
我已经安装了Elasticsearch版本1.7.1。一切正常。我也安装了 JDBC 驱动程序。检查下面我的插件文件夹 目录E:\Xampp\htdocs\my-elastic\elasticsear
在我使用 webpack common chunks 插件创建包含第三方库(如 angular、react、lodash 等)的 vendor 包之前,但后来我知道了 webpack dll
我们正在尝试使用(Jenkins、sonar、eclipse ...)安装 CI 平台。 为了让每个开发人员都可以在提交之前对他的代码进行分析,我想知道两种选择: 使用 Sonar 插件运行本地分析。
我知道这是一个比较特殊的问题。尽管如此,也许有些人知道这一点: 我想在 Eclipse 中使用 Maven 编译 Hector=> 分支:0.7.0 和标签:hector-0.7.0-29(https
我卡住了。我一直在尝试寻找或自己创建一个简单的准系统示例,说明如何为 VS 2010 Express 创建 Outlook 插件。我知道这在 VS 2010 Pro 中更简单,但是,在快速版本中真的不
我有以下排除过滤器来忽略所有 R 文件类: findbugs-exclude-filter.xml 当我将它用于 FindBugs-IDEA 插件时,它可以
我刚开始玩 CakePHP,我发现了 Wildflower CMS .我喜欢这个想法,并打算开始修补它。不过,我有一个问题。 在自述文件中,我发现了以下内容:“Wildflower 不是也不会是 Ca
虽然现在大部分情况都是使用n-api来编写插件,但是底层毕竟是v8(和libuv),使用v8编写简单的插件,同时熟悉v8的使用。 本文介绍在写c++插件时,简单又常用的写法,其实本质上,写插件
本篇是 Python 系列教程第 3 篇,更多内容敬请访问我的 Python 合集 Visual Studio Code的安装非常简单,就不放这里增加文章篇幅了。 相比PyCharm,V
Maven – 插件 什么是 Maven 插件? Maven 实际上是一个依赖插件执行的框架,每个任务实际上是由插件完成。Maven 插件通常被用来: 创建 jar 文件 创建 war
我正在编写一个插件来添加带有标签 [deposit_page] 的页面;该标记应替换为一些 PHP 代码。 这就是我所拥有的,但它不起作用。有什么我遗漏或做错了什么吗? function deposi
我是一名优秀的程序员,十分优秀!