What is ActionForm? (5)
XCube_ActionFormは開発者のためのウェブにおけるデバイスです。 しかし、それはデータベースに接続しません。 XOOPS Cubeは、ビジネス論理とデータベースとActionFormを切り離すのを勧めます。
Load_example01
データベースに対してActionFormの値を使うために、あなたはXoopsSimpleObjectを連携させることができます。XCube_ActionFormには、そのためのインタフェースがあります。

load(&$object)

Load_example02
あなたは load() の中で$objectの値をActionFormへコピーするロジックを実装すべきです。 XCube_ActionFormは初期値を持たせることが困難です。そこで、あなたは、ActionFormを設定するのにXoopsSimpleObjectを使用することができます。 この方法は、再編集機能にとって重要です。 あなたがロード済オブジェクトをActionFormに送るなら、それはコンテンツの再編集です。 あなたが新しいオブジェクトをActionFormに送るなら、それはコンテンツの新規作成です。 言い換えれば、これは「新規作成と編集の差異の除去」です。
Load_example03
さらに、あなたは特別なローディングのためにこのメンバー関数を利用することができます。 例えば、ActionFormは文字列として$objectの整数値をコピーすることができます。

update(&$object)

あなたはActionFormの値を$OBJECTへコピーするロジックを実装するべきです。 このメンバ関数はバリデーションがうまくいった後に呼ばれなければなりません。 load()と同様に、あなたは特別なアップデートにこのメンバ関数を利用することができます。 例えば、ユーザの入力値から「変更された日時」フィールドをコピーするべきではありません。 この場合、あなたはいつもそのフィールドにtime()をセットすることができます。

Update_example02
例となる ActionForm をあなたの myannounce モジュールで見てください。

function update(&$obj)
{
  
$obj->set('update_unixtime', time());
  
$obj->set('subject', $form->get('subject'));
  
$obj->set('message', $form->get('message'));
}

このupload()'create_unixtime'を上書きしません。 そして、それは'update_unixtime'time()を使用します。 このようなテクニックは、ユーザから重要なフィールドを保護するために使用されます。 例えば、ユーザのActionFormは管理者だけが編集することができるフィールドを扱うべきではありません。 このコンセプトを理解しているなら、あなたはユーザタイプでActionFormを切り替えることができます:

$actionForm = $xoopsUser->isAdmin() ?
              new
EditForm4Admin() : new EditForm4User();
|