Zend表单创建动态添加的元素

时间:2014-10-20 09:41:38

标签: jquery forms zend-framework dynamic subform

我是Zend框架的新手,我想要的是创建一个表单,除了简单的输入和选择字段之外,还将使用jquery添加多个输入字段,例如: Multiple input fields

和另一个可以接受多对选择和输入的表单元素,如下所示: Multiple pairs of select and input

这些将使用jquery插入客户端。我如何使用表单元素在Zend上实现它?

1 个答案:

答案 0 :(得分:0)

我已经完成了您在某些项目中尝试实现的目标,而我发现的最佳方法是使用子表单。这里有一些可能对您有帮助的指导原则。

配置父表单

public function __construct($wine = null)
{
    parent::__construct();

    $this->setName('parent-form'); // you can set any name
    $this->setIsArray(true);
    $this->_initForm();
}

在表单中添加所需的子表单

protected function _initForm(){
    $this->clearSubForms();
    $subForm = new Application_Form_Subform(1);
    $subForm->removeDecorator('Form');
    $this->addSubform($subForm,'subform-'.1);

    $subForm = new Application_Form_Subform(2);
    $subForm->removeDecorator('Form');
    $this->addSubform($subForm,'subform-'.2);
}

配置子表单

public function __construct($key) {
    parent::__construct();
    $this->setElementsBelongTo("parentform[subform][$key]");
    $this->setIsArray(true)->setName("subform")->setAttrib('enctype', 'multipart/form-data');

    $this->_initForm();
}

在表单视图上回显子表单

<?php
    foreach($this->element->getSubforms() as $key => $subForm){
        echo $subForm;
    }
?>

使用Jquery

在表单视图上动态添加元素

我不会在这里提供任何代码。但我通常做的是为子表单添加一个隐藏的模板,以便我可以从中进行克隆。您还需要做的是在子表单的输入上调整名称属性的索引。

在控制器上获取数据

if ($request->isPost()) {

    $data = $request->getPost('parentform');

    if ($form->isValid($data)) {
        foreach ($data['subform'] as $subformInfo) { // loop through each subform input
          // do something with your data
        }
    }