niestety z zend1 jestem całkowicie zielony, a czas goni, dlatego postanowiłem zapytać:
mam sobie podstronę, która umożliwia dodawanie ankiet, składa się ona z 3 elem.:
informacji o ankiecie
pytań
odpowiedzi
Pierwszy elem. jest całkowicie statyczny, pozostałe dwa są dodawane po przez AJAX (przycisk dodawania pytania dodaje form. pytanie + form. odpowiedź, przycisk dodawania odpowiedzi dodaje form. odpowiedź).
Tak więc nigdy nie wiadomo ile będzie pytań jak i nie wiadomo ile odpowiedzi dla danego pytania.
w controlerze tworzę główny formularz:
$form1 = new Form_Test(); $this->view->form1 = $form1;
Po przez ajax dodaję kolejne pytania/odpowiedzi:
$formQuestion = new Form_Test2(); $formQuestion->setElementsBelongTo("question_' . $nextQuestionIndex); $formAnswer = new Form_Test3(); $formAnswer->setElementsBelongTo("answer_' . $nextQuestionIndex . '_' . $nextAnswerIndex); //renderuje fragment html z template z pliku, dodaje w odpowiednich miejscach
Po naciśnięciu submit wykonuję:
//upraszczam pętle by oddać sens tego co się dzieje for($i =1; $i <= $quantityQuestions; $i++) { $indexForm = new Form_Test2(); //przypisuje formularze odpowiedzi jako subformy formularzy pytań for($j =1; $j <= $quantityAnswersForSpecQuestion; $j++) { $indexForm->addSubForm(new Form_Test3(), 'answer_' . $i . '_' . $j . '); } //przypisuje formularze pytan jako subformy formularza glownego $form1->addSubForm($indexForm, 'question_' . $i . ''); } if($form1->isValid($_POST)) { var_dump('good'); } else { echo '<pre>'; var_dump($form1->getMessages()); echo '</pre>'; }
var_dump() zwraca poprawnie tablicę z komunikatami:
["firstForm"]=> ["isEmpty"]=> string(36) "Value is required and can't be empty" } ["question_1"]=> ["secondForm"]=> ["isEmpty"]=> string(36) "Value is required and can't be empty" } ["answer_1_1"]=> ["thirdForm"]=> ["isEmpty"]=> string(36) "Value is required and can't be empty" } } ["answer_1_2"]=> ["thirdForm"]=> ["isEmpty"]=> string(36) "Value is required and can't be empty" } } } ...
Niestety wyświetlają się tylko te wiadomości, które są przypisane do głównego formularza $form1.
Czy może mnie ktoś oświecić co zrobić by wyświetlało dla wszystkich?
Jeszcze pytanie jeżeli w przyszłości chcę zrobić walidator, który wyświetli wiadomość w przypadku braku pytań to w jaki sposób mogę później umieścić tą wiadomość w konkretnym miejscu?