1

我正在按照Lendr教程制作 Joomla 3.2 组件。他们似乎将所有数据库列作为受保护字段添加到他们的模型中(使用辅助 get/set 函数来操作它们)和 CRUD 操作作为函数。他们的表类只包含一个构造函数:

  function __construct( &$db ) {
    parent::__construct('#__lendr_books', 'book_id', $db);
  }

当他们获取或保存项目时,他们返回其表类的实例而不是模型的更新版本,例如,如果您保存了新项目,模型上受保护的 ID 字段将为零,但返回的 ID表对象将非零。

所以对我来说,将所有列都放在模型上是没有意义的,最好在表类上显式声明它们,或者在模型上保持它们更新并且不返回任何表对象。

Joomla 中内置的组件没有使用新的 MVC 约定,而且似乎到处都是除了 CRUD 操作之外的地方。

使用非传统 MVC 类在 Joomla 3.2 中模型应该做什么以及表应该做什么有明确的定义吗?

4

1 回答 1

0

它似乎是这样的:

JTable似乎类似于 Ruby on Rails 的ActiveRecord::Base. 它对数据库进行建模,除了声明表名和主键并可能覆盖某些方法(例如check )的构造函数之外,实际上不需要在此处添加任何额外内容。提供了基本的 CRUD 操作JTable,通常由扩展的类调用JModelBase

  function __construct( &$db ) {
    parent::__construct('#__my_table', 'id', $db);
  }

JModelBase处理模型的业务逻辑以及准备查询(通常会返回相应的JTable值。控制器应该始终直接处理 this 而不是JTable.

在这两种情况下,都不需要显式地将数据库列添加为类的属性(就像在 Rails 中一样)。

于 2014-03-08T09:24:29.503 回答