Joomla 模型类型之间有啥区别?

Posted

技术标签:

【中文标题】Joomla 模型类型之间有啥区别?【英文标题】:What are the differences between Joomla Model Types?Joomla 模型类型之间有什么区别? 【发布时间】:2014-03-09 09:28:27 【问题描述】:

我正在努力掌握 Joomla (3.x) 框架背后的强大功能。

我注意到一个组件中有multiple types of model that can be used:


JModelAdmin

原型管理模型。充当应用程序特定对象的工厂类,并提供许多支持 API 函数。

JModelLegacy

Joomla 模型的基类 充当应用程序特定对象的工厂类,并提供许多支持 API 函数。

JModelList

用于处理项目列表的模型类。 充当应用程序特定对象的工厂类,并提供许多支持 API 函数。

JModelForm

原型形式模型。 充当应用程序特定对象的工厂类,并提供许多支持 API 函数。

JModelItem

原型项目模型。


我知道JModelLegacy 似乎是基础类。默认情况下,我的模型一直在扩展 JModelLegacy,但是,我想知道我是否可以潜在地利用其他类的好处。

如果有人知道这些模型,我希望能解释一下这些模型类之间的区别,以及您将使用其中一个而不是其他的预期场景。

【问题讨论】:

【参考方案1】:

首先所有的类都可用于代码学习:

\libraries\legacy\model\

了解这些类(一般而言)应与相应的控制器结合使用也很重要:JControllerLegacyJControllerFormJControllerAdmin

JModelLegacy - 是 Joomla 模型(MVC 中的模型)的基类。通过初始化数据库驱动程序对象和表对象,它基本上可以作为工厂类工作。

如果您只想做一些基本的 SQL 查询(任何与 JDatabase 相关的工作)并编写其他业务逻辑,您可能需要扩展此类。

所有模型都将扩展JModelLegacy


JModelList - 是用于处理项目列表的类。它提供分页和过滤。基本上,在您显示项目列表的任何地方,您都可以使用JModelList。所有核心组件都依赖JModelList


JModelFormJModelAdmin 通常与表单相关联。表单可以是用户注册表单或创建和编辑记录。 Joomla 中的表单在 XML 文件中定义。 JModelForm 会将这些文件作为 JForm 对象加载,将加载表单数据、预处理表单并对其进行验证。

这是您可以使用的最强大的类之一。他们将完成繁重的工作。当您不喜欢某个特定行为时,您可以通过实现自己的代码来覆盖它。

JModelAdmin 为表单添加了一些额外的管理功能:

对记录执行批处理操作。 将对记录进行 ACL 检查。

JModelAdmin 通常用于编辑记录或批量操作,尤其是在后端。


JModelItem - 你不太可能需要它。它只公开了一个方法getStoreId() 和两个属性。你不需要这个类,除非作为一个命名的东西,而不是使用JModelLegacy,你想在做一些基本的事情时扩展它,比如显示一条记录。 (我个人对事物的理解)。


结论:以上是对这些类的一般介绍,正如我所见。我的建议是详细研究 Joomla 如何使用它们,公开了哪些方法以及如何使用它们。它们是非常强大的类,特别是对于 CRUD 操作,它们将帮助您完成所有繁重的工作。在了解它们的作用后,您可以使用它们并在需要时覆盖它们。

【讨论】:

这是一个令人耳目一新的有见地的答案!在问题范围之外,是否建议在管理区域中为每个实体使用两个模型?一种用于编辑特定记录,另一种用于列出所有记录? 是的,有两种型号。您可能还需要两个控制器。喜欢记录和记录。简单来说:编辑一条记录 => JModelAdmin;查看多条记录 => JModelList.

以上是关于Joomla 模型类型之间有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

在 Joomla 替代布局和使用 K2 模板之间感到困惑

从模型到视图的 Joomla 组件数据

在 joomla 3.0 中使用单个模型从表单写入多个表

joomla 2.5中保守缓存和渐进缓存有什么区别?

joomla 组件不调用任何模型函数和控制器函数

没有插件的Joomla自定义类型/自定义字段?