1

サブフォームを使用して 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() はフォーム全体ではなく、2 番目のサブフォームの要素のみを返します。

4

4 に答える 4

2

私は最近この問題に遭遇しました。getValuesは、結果を修正するためにレンダリングするarray_merge_recursiveではなく、array_mergeを使用しているように見えます。バグレポートを提出しましたが、まだフィードバックを受け取っていません。バグレポートを提出しました(http://framework.zend.com/issues/browse/ZF-8078)。おそらくあなたはそれに投票したいですか?

于 2009-10-21T17:44:51.007 に答える
0

サブフォームから値を取得するのと同じ問題がありますが、これで解決しますが、私の希望のコードではありません: コントローラーでは、このコードで値を取得します。 );

于 2010-03-28T04:59:20.170 に答える
0

同じ問題が発生しました。getValues の代わりに post を使用しました。

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

getValues が $post によって返される値と同じ値を返さない場合があります。getValues() のバグに違いありません。

于 2013-06-25T05:18:31.013 に答える
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);
  }
}
于 2009-09-28T13:21:17.180 に答える