0

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

「送信」ボタンをクリックすると、フォームに入力された値を次のように出力しようとしています。

/** コード スニペット、現在検証中ではなく、印刷のみ **/

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

複数の表示グループに対して繰り返します。

もっと良い方法があると確信していますが、現在のところ見つけることができません。これは現在、フォームが 1 つ以上のサブフォームで構成されている場合に、$_POST を介してすべてのフォーム値を取得するために考えられる 1 つの方法です。誰かがより良い解決策を知っている場合は、投稿してください!

于 2010-01-07T18:44:13.473 に答える
0

Aは、変数Zend_Formから値を自動的に取得しません。$_POST使用する:

$bigform->populate($_POST)

または代わりに:

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

サブフォームに同じ名前の要素が含まれていると、それらが衝突することを覚えておいてください。これを確認するには、ブラウザで[表示] => [ページソース]オプションを使用して、生成されたHTMLを確認します。同じ属性を持つ2つの<input>要素が表示される場合、これが問題です。name

このためのZendソリューションは、以下を使用してサブフォーム要素に異なる名前を付けることsetElementsBelongToです。

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

さらに、これらの呼び出しは目的を果たさないため、除外する必要があります(ただし、これらの呼び出しはに設定する必要があります$bigForm)。

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