Нужна помощь с проверкой выпадающего меню Zend Form - PullRequest
1 голос
/ 20 сентября 2011

Я работаю над проектом Zend Framework, и мне нужно, чтобы пользователь выбрал школу, а затем она переходит к следующей форме, затем выбирает класс.

Например, пользователь выбирает среднюю школу ABC и затем выбирает "Оценка"8 "

Раскрывающееся меню" Школа "и" Класс "имеет программный код, извлекающий данные из базы данных.

Моя проблема заключается в том, что когда пользователь выбирает школу, а затем в следующем классе, если онне выбирайте какие-либо значения и не нажимаете «отправить», это возвращает ошибку проверки «Значение является обязательным и не может быть пустым», что является правильным, но затем выпадающее меню становится пустым.

Я хотел знать, какЗаново заполните значения обратно в выпадающее меню оценки, если форма не проверяется.

Большое спасибо

Вот мой код

Вот функция, которую я генерирую оценкузначения (выборка из базы данных)

  public function processSchoolSelectionAction()
    {

        $form = $this->getSchoolSelectionForm();


                if ($form->isValid($_POST))
                    {


                     // getting the values



                       $schoolId = $form->getValue('school');

                       $schoolYear = new Application_Model_DbTable_SchoolYear();

                      $schoolYearValues =  $schoolYear->getYearValues($schoolId);


                      array_unshift($schoolYearValues, array ('key' =>'' , 'value' =>'Please Specify'));


                      $form = $this->getYearSelectionForm();
                      $form->year->addMultiOptions($schoolYearValues);
                      $form->schoolId->setValue($schoolId);

                      $this->view->form = $form;

                    }
               else
             {
                 $data = $form->getValues();
                 $form->populate($data);
                 $this->view->form = $form;

             }

    }

Код, обрабатывающий форму выбора года

открытая функция processYearSelectionAction () {

$form = $this->getYearSelectionForm();


        if ($form->isValid($_POST))
            {


             // getting the values



               $schoolId = $form->getValue('schoolId');

               $yearId = $form->getValue('year');



               $textbookList = new Application_Model_DbTable_TextbookList();

               if ($textbookList->checkTextbookExist($schoolId, $yearId))
                    { // check if textbookExist




                    }
               else
                   {


                           $this->view->message = "Sorry, But the list you requested is currently not available for ordering online.";
                   }





            }
       else
     {

           $data = $form->getValues();
           $form->populate($data);
        $this->view->form = $form;

     }

}

Форма выбора школы

<?php

class Application_Form_SchoolSelection extends ZendX_JQuery_Form
{
        public function init()
                {
                        $this->setName('schoolSelection');



                        $school = new Application_Model_DbTable_School;
                        $schoolValues = $school->getSchoolValues();

                        array_unshift($schoolValues, array ('key' =>'' , 'value' =>'Please Specify'));


                        $schoolElement = new Zend_Form_Element_Select('school');
                        $schoolElement->addMultiOptions($schoolValues);
                        $schoolElement->setLabel('School');
                        $schoolElement->setRequired(true);
                        $schoolElement->setRegisterInArrayValidator(false);



                        $submitElement = new Zend_Form_Element_Submit('submit');
                        $submitElement->setLabel("Next");


                        $this->addElements(array(
                        $schoolElement,
                        $submitElement
                        ));
                }

}
?>

Форма выбора класса (года)

<?php

class Application_Form_YearSelection extends ZendX_JQuery_Form
{
        public function init()
                {
                        $this->setName('yearSelection');




                          $yearElement = new Zend_Form_Element_Select('year');

                          $yearElement->setLabel('Year');
                          $yearElement->setRequired(true);
                          $yearElement->setRegisterInArrayValidator(false);

                        $schoolIdElement = new Zend_Form_Element_Hidden('schoolId');

                        $submitElement = new Zend_Form_Element_Submit('submit');
                        $submitElement->setLabel("Next");


                        $this->addElements(array(
                        $yearElement,
                        $schoolIdElement,
                        $submitElement
                        ));
                }

}
?>

Ответы [ 2 ]

1 голос
/ 20 сентября 2011

Вот как я это сделал:

В Controller при создании формы передайте данные из запроса:

$some_selected_data = $this->_getParam('param_from_request'); // you need to validate this

$form = new Application_Form_SchoolSelection( array('some_data' => $some_selected_data) );

Затем в классе формы получите это значение следующим образом:

$data = $this->getAttrib('some_data'); // the key value of array above

и просто спросите

if($data) {

 // get value from DB and
 //SET VALUE TO Zend_Form_Element
}
0 голосов
/ 20 сентября 2011

Очевидно, вам необходимо заполнить параметры поля Select.

В вашем processYearSelectionAction в части ошибки проверки просто возьмите schoolId, который вы сохранили в скрытом поле, и используйте его так же, как вы использовали в processSchoolSelectionAction для заполнения опций вашего поля.

...