What is ActionForm? (5)
XCube_ActionForm
は開発者のためのウェブにおけるデバイスです。
しかし、それはデータベースに接続しません。 XOOPS Cube
は、ビジネス論理とデータベースとActionForm
を切り離すのを勧めます。
データベースに対してActionForm
の値を使うために、あなたはXoopsSimpleObject
を連携させることができます。XCube_ActionForm
には、そのためのインタフェースがあります。
load(&$object)
あなたは load() の中で$object
の値をActionForm
へコピーするロジックを実装すべきです。
XCube_ActionForm
は初期値を持たせることが困難です。そこで、あなたは、ActionForm
を設定するのにXoopsSimpleObject
を使用することができます。
この方法は、再編集機能にとって重要です。
あなたがロード済オブジェクトをActionForm
に送るなら、それはコンテンツの再編集です。
あなたが新しいオブジェクトをActionForm
に送るなら、それはコンテンツの新規作成です。
言い換えれば、これは「新規作成と編集の差異の除去」です。
さらに、あなたは特別なローディングのためにこのメンバー関数を利用することができます。
例えば、ActionForm
は文字列として$object
の整数値をコピーすることができます。
update(&$object)
あなたはActionFormの値を$OBJECTへコピーするロジックを実装するべきです。
このメンバ関数はバリデーションがうまくいった後に呼ばれなければなりません。
load()と同様に、あなたは特別なアップデートにこのメンバ関数を利用することができます。
例えば、ユーザの入力値から「変更された日時」フィールドをコピーするべきではありません。
この場合、あなたはいつもそのフィールドにtime()をセットすることができます。
例となる 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();