从Zend_Form_SubForms检索值时出现问题 - 没有返回值

时间:2010-01-07 16:34:26

标签: zend-form zend-form-sub-form

我有一个包含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>";

}

最终结果是 - 表单中的所有元素都会被打印,但是在发布表单之前输入的值不会被打印。

任何想法都表示赞赏......我已经围绕这个圈子跑来跑去了!

提前致谢!

2 个答案:

答案 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');