DB_DataObject_FormBuilder

DB_DataObject_FormBuilder
Class to automatically build HTML_QuickForm objects from a DB_DataObject-derived class

DB_DataObject + HTML_QuickForm でデータベースの操作を容易にするパッケージ。
データベースのテーブル構成にあわせて QuickForm Element を生成してくれてかつ update と insert までやってくれるというなんだか凄そうな内容で目をつけてたんですが、時間ができたので軽く触ってみるとこれが本当に凄かった。

以下サンプルをば。

test という database へ

    {table: member}
    id (primary key)
    name (char)
    prefecture (int)

    {table: prefecture}
    id (primary key)
    value (char)

といったテーブルを準備。狙いとしては名前 (name) および都道府県 (prefecture) を保存するようなデータベース。member テーブルの prefecture カラムが prefecture テーブルの id と link するような感じですね。都道府県テーブルはスタティックな値を保持していることにしましょう。(適当にいくつか投入) このテーブルを元に DataObject の createTable を行います。出来たスキーマ情報ファイルを使って DataObject が使用できる環境を構築します。この件については DB_DataObject Document の Auto Building and Database Schema を参照のこと。

AutoJoin も使いたいので

    [member]
    prefecture = prefecture:id

という test.links.ini も作っておきましょう。

DataObject 単体で動作できる環境が出来上がったら、続いてスキーマ情報の Member.php と Prefecture.php へ以下のような FormBuilder 用定数を追加。

class DataObjects_Member extends DB_DataObject 
{
    /* (中略) */

    /* formbuilder configuration */
    var $fb_fieldsToRender = array('name', 'prefecture');
}
class DataObjects_Prefecture extends DB_DataObject 
{
    /* (中略) */

    /* formbuilder configuration */
    var $fb_linkDisplayFields = array('value'); 
}

$fb_fieldsToRender は実際に render するカラムの指定、$fb_linkDisplayFields は link record として実際に出力するカラムの指定です。このあたりどんな Option があるかは Formbuilder configuration options をどうぞ。

あとは実際のアクセスファイルとして下のような感じ。

    $do = DB_DataObject::factory('member');
    $fb =& DB_DataObject_FormBuilder::create($do);
    $form =& $fb->getForm();
    if ($form->validate()) {
        $form->process(array(&$fb,'processForm'), false);
        echo "database write
";
    }
    echo $form->toHtml();

これで以下のような HTML Form が出力されます。

20041013_01.jpg

process() のコールバック関数 processForm で、データベースへの insert まで勝手に行ってくれます。
また $do = DB_DataObject::factory('member'); 後に $do->get($id) でデータベースの値を取得すれば更新 Form になります。

20041013_02.jpg

submit すれば update が行われます。このあたりの処理は DataObject にて指定した primary key が null(0) か否かで変化します。

あとはテンプレートの適応とか FormBuilder のその他 Option とかもう少し色々要調査。同テーブルにおけるフォーム外の値をデータベースへ同時に投入するのは fieldsToRender に含めつつテンプレートで表示させないようにしないとダメなのかとか、primary key を hidden に入れてるけどこれ本当に大丈夫なのかとか。

トラックバック(0)

このブログ記事を参照しているブログ一覧: DB_DataObject_FormBuilder

このブログ記事に対するトラックバックURL: http://hatotech.org/mt-admin/mt-tb.cgi/343

コメントする

このブログ記事について

このページは、が2004年10月13日 20:20に書いたブログ記事です。

ひとつ前のブログ記事は「24 シーズンII」です。

次のブログ記事は「Google Desktop Search」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.01