0

我有一个 Zend_Form,它有 4 个或更多子表单。

/** 代码片段 **/ $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);

单击“提交”按钮时,我试图打印出输入表单的值,如下所示:

/** 代码片段,目前没有验证,只是打印 **/

if($this->_request->getPost()){ $formData = array();

  foreach($bigForm->getSubForms() as $subForm){
        $formData = array_merge($formData, $subForm->getValues());      
  }
  /* Testing */
  echo "<pre>";
  print_r($formData);
  echo "</pre>";

}

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

任何想法都值得赞赏......我已经在这个圈子里跑来跑去!

提前致谢!

4

2 回答 2

1

这就是我所做的 -

$bigForm->addElements($littleForm1->getElements());

然后,像这样遍历表单元素:

    $displayGroup1 = array();

    foreach($bigForm->getElements() as $name=>$value){

        array_push($displayGroup1, $name);
    }

然后,将 displayGroup 添加到 $bigForm:

   $bigForm->addDisplayGroup($displayGroup1, 'test',array('legend'=>'Test'));

并重复多个显示组。

我确信有更好的方法可以做到这一点,但我目前无法找到一个。如果表单由一个或多个子表单组成,这是目前我能想到的一种通过 $_POST 检索所有表单值的方法。如果有人知道更好的解决方案,请发布!

于 2010-01-07T18:44:13.473 回答
0

AZend_Form不会自动从$_POST变量中检索值。利用:

$bigform->populate($_POST)

或者:

$bigform->populate($this->_request->getPost())

要记住的另一件事是,如果子表单包含具有相同名称的元素,它们将发生冲突。要检查这一点,请在浏览器中使用选项 View => Page Source 并查看生成的 HTML。当您看到两个<input>具有相同name属性的元素时,这就是问题所在。

Zend 的解决方案是使用以下方法为子表单元素赋予不同的名称setElementsBelongTo

$littleForm1->setElementsBelongTo('littleForm1');
$littleForm2->setElementsBelongTo('littleForm2');

此外,您应该忽略这些调用,因为它们没有任何用途(但您应该将它们设置为$bigForm):

$littleForm->setMethod('post');
于 2010-01-07T16:54:14.787 回答