Zend framework Zend_表单使用子表单getValues()问题

Zend framework Zend_表单使用子表单getValues()问题,zend-framework,zend-form-sub-form,Zend Framework,Zend Form Sub Form,我正在Zend Framework 1.9中使用子表单以及在这些表单上启用的Zend_JQuery构建表单。表单本身很好,所有的错误检查等工作正常。但我遇到的问题是,当我试图检索控制器中的值时,我只收到最后一个子表单的表单条目,例如 我的主窗体类(速度缩写): 因此,所有的工作都应该在显示中,当我提交时没有填写所需的值,将返回正确的错误。但是,在我的控制器中,我有: class My_Controller extends Zend_Controller_Action { public fun

我正在Zend Framework 1.9中使用子表单以及在这些表单上启用的Zend_JQuery构建表单。表单本身很好,所有的错误检查等工作正常。但我遇到的问题是,当我试图检索控制器中的值时,我只收到最后一个子表单的表单条目,例如

我的主窗体类(速度缩写):

因此,所有的工作都应该在显示中,当我提交时没有填写所需的值,将返回正确的错误。但是,在我的控制器中,我有:

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()只返回第二个子表单中的元素,而不是整个表单。

我想可能是我误解了子表单在Zend中的工作方式,下面的代码帮助我实现了我想要的。我的元素没有一个在子表单中共享名称,但我想这就是Zend_表单以这种方式工作的原因

在我的控制器中,我现在有:

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);
  }
}

我最近遇到了这个问题。在我看来,getValues使用的是array\u merge,而不是array\u merge\u recursive,后者确实能够提供正确的结果。我提交了一份bug报告,但还没有得到任何反馈。
我提交了一份bug报告()。也许你想投票表决吗?

我也有同样的问题要从子表单中获取价值,我用这个解决它,但不是我想要的 代码: 在控制器中,我使用以下代码获取值:“rolesSubform”是我的子窗体名称
$this->_request->getParam('rolesSubform')

遇到了同样的问题。使用post而不是GetValue

$post = $this->getRequest()->getPost();
有时getValues返回的值与$post返回的值不同。
必须是getValues()错误。

为什么不使用init()而不是createForm?这样你就不需要打电话了。测试回发的较短方法:if($this->\u request->isPost())。$form->isValid处缺少一个>。请尝试$form->isValid($\u POST)。您好,tharkun,对不起,是的,我实际使用的是init()。这是伪代码,不是我的实际代码,因为表单本身就是huuuuge。为了清晰起见,我将更新上面的代码。我相信我已经解释了Zend_表单处理已发布表单的方式不正确,因此将在下面发布我的新解决方案。Blockhead,这似乎在上周左右解决了,因为我的错误请求状态已更新,但还没有机会测试它。看见
$post = $this->getRequest()->getPost();