У меня проблема, когда я не могу заставить значения повторно заполнить форму zend. Я использую форму, немного отличающуюся от той, к которой я привык.Как я могу повторно заполнить эту форму zend?
Я сломал «номер социального страхования» на три поля, значения выходят как массив, но я не могу заставить их вернуться после операции.
Это мой класс формы:
class Application_Form_Checkssnforexistingreferral extends Zend_Form {
public function init() {
// SSN
$this->addElement('text', 'ss_number', array(
'label' => 'SSN: ',
'required' => True,
));
}
}
Тогда на мой взгляд, я использую форму как так ...
<?php // SSN (first segment)
echo '<p>Social Security Number</p>';
echo $this->formText('ss_number["first"]', '', array(
'size' => 3,
'maxlength' => 3,
'required' => True,
'id' => 'ssn1',
))
?>
<span>-</span>
<?php // SSN (second segment)
echo $this->formText('ss_number["second"]', '', array(
'size' => 2,
'maxlength' => 2,
'required' => True,
'id' => 'ssn2',
))
?>
<span>-</span>
<?php // SSN (third segment)
echo $this->formText('ss_number["third"]', '', array(
'size' => 4,
'maxlength' => 4,
'required' => True,
'id' => 'ssn3',
))
?>
Я сделал это так, чтобы я мог иметь больший контроль над стилизация и представление элементов формы, она работает довольно хорошо в более крупной форме, хотя у меня возникают проблемы с заполнением полей на этом.
Вот что я пытаюсь в контроллере ...
if ($this->getRequest()->isPost()) {
$formData = $this->getRequest()->getPost();
if ($form->isValid($formData)) {
$referralsModel = new Application_Service_Findssninreferrals();
$referrals = $referralsModel->findSocialSecurityNumber($formData);
// load the view's parameter 'referral' w/ the object collection
// and 'NULL' the 'first page load' parameter
$this->view->referrals = $referrals;
$first = $formData['ss_number']['"first"'];
$second = $formData['ss_number']['"second"'];
$third = $formData['ss_number']['"third"'];
$form->populate(array('ss_number["first"]' => $first,
'ss_number["second"]' => $second,
'ss_number["third"]' => $third
));
if (empty($referrals)) {
$flashMessenger->addMessage('There is no record found for this SSN, you may create a new referral for this client');
print_r($formData);
$form->populate(array($formData['ss_number']));
$ssn = $first . $second . $third;
$this->view->continueLink = "link to create new referral" . $ssn;
}
} else {
// else populate the form and allow the correction of...
$flashMessenger->addMessage('There was a problem with the number that you entered, please try again...');
$form->populate($formData);
}
}
$this->view->form = $form;
...
это как один из элементов делает, как HTML ...
<p>Social Security Number</p>
<input type="text" required="1" maxlength="3" size="3" value="" id="ssn1" name="first" class="idleField">
В контроллере раздел if (emtpy ($ referrals)) - это то место, где я выполнял большую часть экспериментов, пытаясь заставить его заново заполнить поля. Вышеупомянутый раздел тоже не работает, я в основном попытался просто «заполнить форму» (array (... », но не повезло. Я просто ничего не получаю от метода« populate »...
Моя форма действительно делает запрос на этот URI, когда кнопка отправки нажата, если я это делаю например, это будет третий запрос, оставив va r $ formData пуст. Я думаю, что это больше связано с тем, что $ formData является многомерным массивом, поскольку он работает, если я просто 'echo $ form' и $ form - это три поля ввода, которые не будут отображаться так, как мне нужно. Но большое спасибо за ваш ответ – rhaag71
@ rhaag71 ваш первый запрос отображает форму, вторая отправляет форму в действие, из этого сообщения вы получаете данные сообщения. У вас должен быть другой запрос повторно отобразить форму и заполнить поля. Лично я, вероятно, использовал бы _forward для другого действия, чтобы повторно отобразить форму. – RockyFord
Хорошо, я проверю это ... Спасибо! – rhaag71