Zend_Form的使用子窗体的GetValues()的问题(Zend_Form using sub

2019-10-17 17:41发布

我使用的子窗体建立一个形式,Zend框架1.9以及Zend_JQuery这些形式被启用。 形式本身是好的,所有的错误检查等工作正常。 但我遇到的问题是,当我试图找回我的控制器中的值,我收到只是最后一个子窗体如form项

我的主窗体类(简称速度):

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(),$的形式 - >的GetValues()只从第二子窗体,而不是整个形式返回的元素。

Answer 1:

我最近就遇到了这个问题。 在我看来,那是GetValues方法而不是使用array_merge_recursive,这并渲染到正确的结果array_merge。 我提交了一个bug报告,但还没有得到它的任何反馈呢。 我提交了一个bug报告( http://framework.zend.com/issues/browse/ZF-8078 )。 也许你想它投票?



Answer 2:

我想,也许我一定是误解了子窗体在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);
  }
}


Answer 3:

我有同样的问题,从子窗体获得价值我用这个,但不是我的愿望一个代码解决这个问题:在控制器我这个代码获得值“rolesSubform”是我的表单名称$此 - > _请求 - > getParam(“rolesSubform” );



Answer 4:

遇到同样的问题。 使用后代替的GetValues的。

$post = $this->getRequest()->getPost();

有些时候的GetValues不返回由$后返回的值相同。 必须是一个的GetValues()错误。



文章来源: Zend_Form using subforms getValues() problem