2

I have following action to display a form

public function showformAction() { $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

2 Answers 2

5

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'; } } 
Sign up to request clarification or add additional context in comments.

1 Comment

Yes you are right. But use $request->getPost() instead of $_POST where you are checking isValid(); Thanks
2

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.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.