开发者

How to submit a form in Zend?

I have following action to display a form

public function showformActi开发者_运维知识库on() {  
   $this->view->form = new Form_MyForm();
   $this->view->form->setAction( 'submitform' );
}

above action shows a form successfully with only one textarea and submit button.

And I am using following action to submit above form:

public function submitformAction() {

    $form = new Form_MyForm();
    $request = $this->getRequest();

      if ( $request->isPost() ) {
           $values = $form->getValues();
           print_r($values);die();      
      } else {
           echo 'Invalid Form'; 
      }
}

Above action is showing following output:

Array ( [myfield] => ) 

It means it is not posting values correctly and always shows empty array or I am not getting posted values correctly. How to post values to submitformAction().

Thanks


I think you must use the isValid() before accessing the values of a submitted form, because it's right there that the values are checked and valorized

public function submitformAction() {

    $form = new Form_MyForm();
    $request = $this->getRequest();

      if ( $request->isPost() ) {
          if ($form->isValid( $request->getPost() )) {
              $values = $form->getValues();
              print_r($values);die();     
          } 
      } else {
           echo 'Invalid Form'; 
      }
}


In complement to @VAShhh response. With some more details: You need to do two things, populate your form fields with the POSTed data and applying security filters and validators to that data. Zend_Form provides one simple function which perform both, it's isValid($data).

So you should:

  1. build your form
  2. test you are in a POST request
  3. populate & filter & validate this data
  4. either handle the fact in can be invalid and re-show the form wich is now decorated with Errors OR retrieve valid data from the form

So you should get:

function submitformAction() {
    $form = new Form_MyForm();
    $request = $this->getRequest();

    if ( $request->isPost() ) {
        if (!$form->isValid($request->getPost())) {
            $this->view->form = $form;
            // here maybe you could connect to the same view script as your first action
            // another solution is to use only one action for showform & submitform actions
            // and detect the fact it's not a post to do the showform part
        } else {
            // values are secure if filters are on each form element
            // and they are valid if all validators are set
            $securizedvalues = $form->getValues();
            // temporary debug
            print_r($securizedvalues);die();
            // here the nice thing to do at the end, after the job is quite
            // certainly a REDIRECT with a code 303 (Redirect after POSt)      
            $redirector = $this->_helper->getHelper('Redirector');
            $redirector->setCode(303)
              ->setExit(true)
              ->setGotoSimple('newaction','acontroller','amodule');
            $redirector->redirectAndExit();
    } else {
           throw new Zend_Exception('Invalid Method'); 
    }
}

And as said in the code re-showing the form you shoudl really try to use the same function for both showing and handling POST as a lot of steps are really the same:

  • building the form
  • showing it in the view in case of errors

By detecting the request is a POST you can detect you are in the POST handling case.

0

上一篇:

下一篇:

精彩评论

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

最新问答

问答排行榜