Joomla模型类型有哪些区别?

16

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

我注意到组件中可以使用多种类型的模型:链接地址


JModelAdmin

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

JModelLegacy

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

JModelList

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

JModelForm

原型表单模型。作为应用程序特定对象的工厂类,并提供许多支持API函数。

JModelItem

原型项模型。


我知道JModelLegacy似乎是基础类。默认情况下,我的模型已经扩展了JModelLegacy,但我想知道是否可以潜在地从其他类中受益。

如果有人熟悉这些模型,请解释一下这些模型类之间的区别,并介绍您何时使用其中一个而不是另一个的场景。

1个回答

29

首先,可以在以下路径下找到所有类的代码:

\libraries\legacy\model\

Classes

同时,重要的是要了解这些类通常应与相应的控制器一起使用:JControllerLegacyJControllerFormJControllerAdmin

JModelLegacy - 是 Joomla 模型(即 MVC 中的模型)的基类。它将作为一个工厂类,通过初始化数据库驱动对象和表对象来工作。

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

所有模型都将扩展自 JModelLegacy


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

JModelLegacy example


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

这是您可以使用的最强大的类之一。它们将承担重任。当您不喜欢特定的行为时,可以通过实现自己的代码来覆盖它。

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

  • 对记录执行批量操作。
  • 将对记录执行 ACL 检查。

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


JModelItem - 非常不可能需要它。它仅公开一个getStoreId()方法和两个属性。除非作为命名的事情,否则您不需要这个类,例如显示记录时不使用JModelLegacy并扩展它。(我个人对此的理解)。


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


1
这是一个令人耳目一新的见解!那么,在问题范围之外,是否建议在管理区域中为每个实体使用两个模型?一个用于编辑特定记录,另一个用于列出所有记录? - Sean
2
是的,有两个模型。你可能也想要有两个控制器。比如记录和记录列表。简单来说:编辑一个记录 => JModelAdmin;查看多个记录 => JModelList。 - Valentin Despa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接