我是Zend框架的新手,我想要的是创建一个表单,除了简单的输入和选择字段之外,还将使用jquery添加多个输入字段,例如:
和另一个可以接受多对选择和输入的表单元素,如下所示:
这些将使用jquery插入客户端。我如何使用表单元素在Zend上实现它?
答案 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
}
}