Ошибка получения значений из Zend_Form_SubForms - значения не возвращены - PullRequest
0 голосов
/ 07 января 2010

У меня есть 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);

При нажатии кнопки «отправить» я пытаюсь распечатать значения, введенные в формы, например:

/ ** Фрагмент кода, в настоящее время не проверяется, просто печать ** /

если ($ это -> _ request-> getPost ()) { $ formData = array ();

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

}

Конечным результатом является то, что все элементы в форме будут напечатаны, но значения, введенные до публикации формы, не будут напечатаны.

Любые мысли приветствуются ... Я бегал кругами, работая над этим!

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 07 января 2010

Вот что я сделал -

$ 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, если форма состоит из одной или нескольких подчиненных форм. Если кто-нибудь знает о лучшем решении, пожалуйста, опубликуйте его!

0 голосов
/ 07 января 2010

A Zend_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');
...