0

Zend_Form を使用してフォームを作成しています ... フォームにいくつかのフィールドを動的に追加する必要があります (jquery/ajax) ... 実行時に作成する必要があるフィールドのセットごとにサブフォームを作成しました ...のような正しい名前を持つ配列内の要素subform1[index][element]、私はさらに2つのサブフォームを追加しました: サブフォーム1: フィールドセットとしてレンダリングされたラッパー サブフォーム2:index名前要素の一部を再生するコンテナ サブフォーム: これは要素を保持するメインサブフォームです

subform2 と elements の部分は、新しい要素のセットごとに繰り返されます...

フォームが作成され、ビューでレンダリングされると、すべてが正常に機能するようになりました。正しい名前を取得します ( subform1[index][element]) ...

しかし、ajaxを使用して新しい要素を生成する場合、フォームをレンダリングしてsubform2部分を正しい名前で取得する方法がわかりません...

これはサブフォームを作成する関数です:

    private function makeSubForm($id, $legend)
    {
        $wrapper = new Zend_Form_SubForm();
        $wrapper->setOptions(array('legend' => $legend, 'class' => 'ui-corner-all multi_value'))
            ->setIsArray(true);

        $array = $this->_getArray($id);
        //-------------------------LOOP--------------------------
        $form_name = "Application_Form_Employ_$id";
//        var_dump($array);
        foreach ($array as $key => $value) {

            $form = new $form_name();

            $container = new Zend_Form_SubForm();
            $container->setOptions(array('class' => 'subform'))
                ->setIsArray(true)
                ->addSubForm($form, 'xxxxx');

            $wrapper->addSubForm($container, $key);
        }
        Zend_Registry::get('session')->{$id} = $array;
        //----------------------------------------------------------

        $this->addSubForm($wrapper, $id);
    }

これが私のアクションメソッドです:

    public function newElementAction()
    {
        $this->_disableView();
        $id = $this->getRequest()->getParam('id');
        $form = new Application_Form_Employment();
        $params = array();
        $keys = Zend_Registry::get('session')->{$id};
        $lastKey = end(array_keys($keys));
        $keys[++$lastKey] = array();

        $params[$id] = $keys;
//        var_dump($params);
        $form->create($params);
//        $form->render();

        $this->_response->appendBody($form->getSubForm($id)->getSubForm($lastKey));
    }

このコードで私subform2[element]は私の名前として取得します...しかし、コメントを外す$form->render();と取得しますsubform1[subform2][subform1][subform2][element]

どうすれば正しい名前の 2 番目のサブフォームの HTML を取得できますか?


欲しいものを手に入れるためのハックを見つけましたが、もっと良い方法を探しています...

public function newElementAction()
{
    $this->_disableView();
    $id = $this->getRequest()->getParam('id');
    $form = new Application_Form_Employment();
    $params = array();
    $keys = Zend_Registry::get('session')->{$id};
    $lastKey = end(array_keys($keys));
    $keys = array(++$lastKey => array());

    $params[$id] = $keys;
    $form->create($params, $id);

    $this->_response->appendBody($form->{$id});
}

私は最後の子だけを作成して親を出力し、クライアント側ではページに挿入する前に親のマークアップを削除しました...

親のインデックスをそのままにしてサブフォームをレンダリングする確実な方法が必要です!!??

4

1 に答える 1

0

動的フィールドをグループ化するためにサブフォームのレイヤーは必要ありません。サブフォームの setIsArray プロパティは、サブフォーム要素が配列にグループ化されることを確認します。したがって、id に基づいて、child1[element1]、child1[element2]、child2[element1]、child2[element2] などがあります。

here で同様の質問に回答しました。ペーストビンもご確認ください。

于 2012-11-07T06:35:04.167 に答える