开发者

Need Help with Zend Form dropdown menu validation

I'm working on a zend framework project and I needed the user to select school and then it goes to the next form then select the grade.

Eg User select ABC High School and then select "Grade 8"

Both School and Grade dropdown menu is soft coded fetching the data from the database.

My problem is that when the user selected a school and then on the next grade form if they don't select any values and click onto "submit" it return a validation error "Value is required and can't be empty" which is correct but the dropdown menu then goes empty.

I wanted to know how to repopulate the values back to the grade dropdown menu if the form doesn't validate.

Thanks so much

Here is my code

Here is the function i generate the grade values (Fetching from the database)

  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;

             }

    }

Code processing the year selection form

public function 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;

     }

}

School selection 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
                        ));
                }

}
?>

Grade (Year) selection form

<?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
                        ));
                }

}
?>


This is how I done that:

In Controller when form is creating, pass data from request:

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

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

Then, in Form Class get that value like this:

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

and just ask

if($data) {

 // get value from DB and
 //SET VALUE TO Zend_Form_Element
}


Obviously, you need to repopulate the options of your Select field.

In your processYearSelectionAction, on the validation failure part just grab the schoolId you stored in the hidden field and use it the same way as you did in your processSchoolSelectionAction to populate your field options.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜