我正在使用子表单在Zend Framework 1.9中构建表单,并在这些表单上启用Zend_JQuery。表单本身很好,所有错误检查等正常工作。但我遇到的问题是,当我试图检索控制器中的值时,我只收到最后一个子表单的表单条目,例如。
我的主表格类(缩写为速度):
Master_Form extends Zend_Form
{
public function init()
{
ZendX_JQuery::enableForm($this);
$this->setAction('actioninhere')
...
->setAttrib('id', 'mainForm')
$sub_one = new Form_One();
$sub_one->setDecorators(... in here I add the jQuery as per the docs);
$this->addSubForm($sub_one, 'form-one');
$sub_two = new Form_Two();
$sub_two->setDecorators(... in here I add the jQuery as per the docs);
$this->addSubForm($sub_two, 'form-two');
}
}
这样一切都可以在显示中正常工作,当我提交时没有填写所需的值,就会返回正确的错误。但是,在我的控制器中我有这个:
class My_Controller extends Zend_Controller_Action
{
public function createAction()
{
$request = $this->getRequest();
$form = new Master_Form();
if ($request->isPost()) {
if ($form->isValid($request->getPost()) {
// This is where I am having the problems
print_r($form->getValues());
}
}
}
}
当我提交此内容并且它超过isValid()时,$ form-> getValues()仅返回第二个子表单中的元素,而不是整个表单。
答案 0 :(得分:2)
我最近遇到了这个问题。在我看来,getValues使用的是array_merge,而不是array_merge_recursive,它可以渲染以纠正结果。我提交了一份错误报告,但尚未得到任何反馈意见。 我提交了一份错误报告(http://framework.zend.com/issues/browse/ZF-8078)。也许你想投票吗?
答案 1 :(得分:0)
我想也许我一定是误解了Zend中子表单的工作方式,下面的代码可以帮助我实现我想要的。我的所有元素都没有在子表单中共享名称,但我想这就是Zend_Form以这种方式工作的原因。
在我的控制器中,我现在有:
if($request->isPost()) {
if ($form->isValid($request->getPost()) {
$all_form_details = array();
foreach ($form->getSubForms() as $subform) {
$all_form_details = array_merge($all_form_details, $subform->getValues());
}
// Now I have one nice and tidy array to pass to my model. I know this
// could also be seen as model logic for a skinnier controller, but
// this is just to demonstrate it working.
print_r($all_form_details);
}
}
答案 2 :(得分:0)
我有同样的问题从子表单中获取值我用它来解决它但不是我想要的 码: 在控制器中我使用此代码获取值'rolesSubform'是我的子表单名称 $ this-> _request-> getParam('rolesSubform');
答案 3 :(得分:0)
遇到同样的问题。使用post而不是getValues。
$post = $this->getRequest()->getPost();
有时,getValues不会返回$ post返回的相同值。 必须是getValues()错误。