Pages

2010年3月19日金曜日

Zend_Form グループ化されてるようなフォームの実装方法。しかも動的

グループ化されてるようなフォームの実装方法を考えてみた。
しかも動的なものを。

場面としては、オンラインアドレス帳をイメージした。
要望としては
・複数ユーザーを同時に追加したい。
・1ユーザーに登録できる項目は増減できるようにしたい。

なんと嫌な仕様なんだ。。。
断ろう。。。

が、できなかった場合のために下記のようなものを考えました。
エラー文言もやっぱりFormを使って表示したいとなるとユーザーや項目追加はその都度ページをサブミットさせるしかないかな。。。



class Default_Form_Foo extends Zend_Form
{
    public function init()
    {
        $this->addElementPrefixPath('Default_Plugin_Validate_'   , '/plugins/Validate'  , 'validate');
        $this->addElementPrefixPath('Default_Plugin_Filter_'     , '/plugins/Filter'    , 'filter');
    }
   
    public function addSubForm($params)
    {
        $cnt1 = count($params);
        foreach ($params as $key1 => $val2) {
            unset($subForm1);
            $subForm1 = new Zend_Form_SubForm();
            foreach ($val1 as $key2 => $val2) {
                unset($subForm2);
                $subForm2 = $this->createSubForm();
                $subForm1->addSubForm($subForm2, $key2);
            }
            $this->addSubForm($subForm1, $key1);
        }
    }
   
    public function createSubForm ()
    {
        $subForm = new Zend_Form_SubForm();

        $element = new Zend_Form_Element_Text('key1');
        $subForm->addElement($element);

        $element = new Zend_Form_Element_Text('key2');
        $subForm->addElement($element);

        return $subForm;
    }
}



    public function init ()
    {
        $form = new Default_Form_Foo();
        $form->addSubForm(array(
            'element1' => array(
                'element1_1' => array(
                    'key1' => 'value1',
                    'key2' => 'value2',
                )
            )
        ));
       
    }

0 件のコメント:

コメントを投稿

Followers