1

Lendrチュートリアルに従って、Joomla 3.2 コンポーネントを作成しています。すべてのデータベース列を保護フィールドとしてモデルに追加し(ヘルパーの get/set 関数を使用して操作します)、CRUD 操作を関数として追加しているようです。それらのテーブル クラスには、コンストラクターのみが含まれています。

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

アイテムを取得または保存するとき、モデルの更新されたバージョンではなく、テーブル クラスのインスタンスを返します。たとえば、新しいアイテムを保存した場合、モデルの保護された 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ます。コントローラーは、 ではなく常にこれを直接処理する必要がありJTableます。

どちらの場合も、(Rails のように) クラスのプロパティとしてデータベースの列を明示的に追加する必要はありません。

于 2014-03-08T09:24:29.503 に答える