как мне заново заполнить эту Zend форму? - PullRequest
1 голос
/ 21 февраля 2012

У меня проблема с тем, что я не могу получить значения для повторного заполнения формы 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))' 'раздел, где я проводил большую часть экспериментов, пытаясь заставить его заполнить поля.Вышеприведенный раздел также не работает, я в основном пытался просто перейти к «form-> populate (array (...»), но безуспешно. Я просто не получаю ничего от метода «populate» ...

1 Ответ

1 голос
/ 21 февраля 2012

Попытка перенаправления на запрашивающий URL вернет вас обратно с заполненной формой. В противном случае это, вероятно, не сработает, вы не сможете заполнить форму без запроса (можете использовать ajax) и у вас не будет нового запроса после публикации. Это одно действие должно быть, по крайней мере, 2 действия, однако Вы можете попробовать это так:

 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"'];

                if (empty($referrals)) {
                    $flashMessenger->addMessage('There is no record found for this 
                        SSN, you may create a new referral for this client');

                    $this->_redirect($this->getRequest()->getRequestUri());
                    //next line may or may not be needed or help
                    $form->populate($formData);

                    $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;
...