Zend表单/子表单部分呈现

时间:2012-11-07 05:53:14

标签: php ajax zend-framework zend-form

我正在使用Zend_Form构建表单...我需要动态地向表单添加一些字段(jquery / ajax)...我为需要在运行时创建的每组字段创建了一个子表单... 要使用正确的名称(例如subform1[index][element])将我的元素添加到数组中,我添加了2个子表单: subform1:呈现为字段集的包装器 subform2:一个播放名称index部分的容器 elements子表单:这是包含元素的主要子表单

对于每组新元素,子窗体2和元素部分都会重复...

现在一切正常,在视图中创建和呈现表单时,我得到了正确的名称(subform1[index][element])......

但是当我使用ajax生成新元素时,我不知道如何渲染表单并使用正确的名称获取子表单2部分......

这是创建子表单的函数:

    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]

那么如何才能获得具有正确名称的第二个子表单的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});
}

我只创建了最后一个孩子并且输出了父母 并在客户端删除父母标记,然后插入页面...

必须有一个可靠的方法来呈现子窗体,其父窗口索引完整!! ??

0 个答案:

没有答案