DatsunBing
DatsunBing

Reputation: 9076

Multi-Page Form in Zend is Validating All Forms too early

I have been working through the Multi Page forms tutorial in the Zend Form Advanced Usage section of the documentation, http://framework.zend.com/manual/en/zend.form.advanced.html.

My first page loads fine, however when I submit it, the second page loads and it includes validation error messages. (Obviously I don't want to see validation errors for this page until the user has filled in the fields...)

I have tracked it down to the final line in the formIsValid() function. It seems that here validation is run for all elements in the three forms (not just the current one), so it's really no surprise that errors are showing on the second page.

I have tried the suggestion in the comments at the end of the tutorial, i.e. $data[$key] = $info[$key].

Have you had a crack at this tutorial? How did you solve the problem?

Any assistance is much appreciated!

Upvotes: 0

Views: 775

Answers (2)

user648198
user648198

Reputation: 2020

I encountered the same problem this is how I solve it.

By replacing

public function formIsValid()
    {
        $data = array();
        foreach ($this->getSessionNamespace() as $key => $info) {
            $data[$key] = $info;
        }

        return $this->getForm()->isValid($data);
    }

With

   public function formIsValid()
    { 
       $data = array();
        foreach ($this->getSessionNamespace() as $key => $info) {
            $data[$key] = $info[$key];
        }
        return (count($this->getStoredForms()) < count($this->getPotentialForms()))? false : $this->getForm()->isValid($data);
    }

Upvotes: 3

akond
akond

Reputation: 16035

The documentations reads:

Currently, Multi-Page forms are not officially supported in Zend_Form; however, most support for implementing them is available and can be utilized with a little extra tooling.

The key to creating a multi-page form is to utilize sub forms, but to display only one such sub form per page. This allows you to submit a single sub form at a time and validate it, but not process the form until all sub forms are complete.

Are you sure you have been validating a single sub-form instead of just whole form?

Upvotes: 0

Related Questions