我有一个包含4个或更多子表单的Zend_Form。
/ ** 代码片段 ** / $ bigForm = new Zend_Form();
$littleForm1 = new Form_LittleForm1();
$littleForm1->setMethod('post');
$littleForm2 = new Form_LittleForm2();
$littleForm2->setMethod('post');
$bigForm->addSubForm($littleForm1,'littleForm1',0);
$bigForm->addSubForm($littleForm2,'littleForm2',0);
点击“提交”按钮,我正在尝试打印输入表单的值,如下所示:
/ ** 代码段,目前尚未验证,只是打印 ** /
如果($这 - > _request->的getPost()){ $ formData = array();
foreach($bigForm->getSubForms() as $subForm){
$formData = array_merge($formData, $subForm->getValues());
}
/* Testing */
echo "<pre>";
print_r($formData);
echo "</pre>";
}
最终结果是 - 表单中的所有元素都会被打印,但是在发布表单之前输入的值不会被打印。
任何想法都表示赞赏......我已经围绕这个圈子跑来跑去了!
提前致谢!
答案 0 :(得分:1)
这就是我做的 -
$ bigForm-&GT; addElements($ littleForm1-&GT;的getElements());
然后,遍历表单元素,如下所示:
$displayGroup1 = array();
foreach($bigForm->getElements() as $name=>$value){
array_push($displayGroup1, $name);
}
然后,将displayGroup添加到$ bigForm:
$bigForm->addDisplayGroup($displayGroup1, 'test',array('legend'=>'Test'));
并重复多个显示组。
我确信有更好的方法可以做到,但我目前无法找到一个。 如果表单由一个或多个子表单组成,这是我可以想到通过$ _POST检索所有表单值的一种方法。 如果有人知道更好的解决方案,请发布!
答案 1 :(得分:0)
Zend_Form
不会自动从$_POST
变量中检索值。使用:
$bigform->populate($_POST)
或者:
$bigform->populate($this->_request->getPost())
要记住的另一件事是,如果子表单包含具有相同名称的元素,则它们将发生冲突。要检查此项,请使用选项View =&gt;浏览器中的页面源并查看生成的HTML。如果您看到两个<input>
元素具有相同的name
属性,那么这就是问题所在。
Zend的解决方案是使用setElementsBelongTo
:
$littleForm1->setElementsBelongTo('littleForm1');
$littleForm2->setElementsBelongTo('littleForm2');
此外,您应该忽略这些调用,因为它们没有用处(但您应该为$bigForm
设置它们):
$littleForm->setMethod('post');