I'm trying to put together a simple Zend_Form setup for a multipaged form,
but the documentation on implementing the multipage part is a bit sparse.
Once the form object is setup with the subforms, what's the "right way" to
render and validate the subforms and process the results?

This is what I have right now:

<?php
require_once 'ApplicationController.php';

require_once 'Zend/Form.php';

class IndexController extends ApplicationController
{

    public function siteInformationAction()
    {
        $subform = $this->_getForm()->getSubForm('site_information');

        if ($this->getRequest()->isPost() &&
$subform->isValid($this->getRequest()->getPost())) {
            return $this->getHelper('redirector')->gotoRoute(
                array(
                    'action' => 'personalInformation'
                )
            );
        }

        $this->view->form = $subform;
        $this->render('form');
    }

    public function personalInformationAction()
    {
        $subform = $this->_getForm()->getSubForm('personal_information');

        if ($this->getRequest()->isPost() &&
$subform->isValid($this->getRequest()->getPost())) {
            var_dump($this->_getForm()->getValues());
            exit;
        }

        $this->view->form = $subform;
        $this->render('form');
    }

    private function _getForm()
    {
        return new Zend_Form(array(
            'method' => 'POST',
            'subforms' => array(
                'site_information' => new Zend_Form(array(
                    'elements' => array(
                        'username' => array(
                            'text',
                            array(
                                'label' => 'Username',
                                'required' => true,
                                'validators' => array(
                                    'NotEmpty'
                                )
                            )
                        ),
                        'password' => array(
                            'password',
                            array(
                                'label' => 'Password',
                                'required' => true,
                                'validators' => array(
                                    'NotEmpty'
                                )
                            )
                        ),
                        'submit_site_information' => array(
                            'submit',
                            array(
                                'value' => 'Next Page'
                            )
                        )
                    )
                )),
                'personal_information' => new Zend_Form(array(
                    'elements' => array(
                        'name' => array(
                            'text',
                            array(
                                'label' => 'Name',
                                'required' => true,
                                'validators' => array(
                                    'NotEmpty'
                                )
                            )
                        ),
                        'street' => array(
                            'text',
                            array(
                                'label' => 'Street',
                            )
                        ),
                        'city' => array(
                            'text',
                            array(
                                'label' => 'City'
                            )
                        ),
                        'state' => array(
                            'text',
                            array(
                                'label' => 'State'
                            )
                        ),
                        'zip' => array(
                            'text',
                            array(
                                'label' => 'Zip'
                            )
                        ),
                        'submit_personal_information' => array(
                            'submit',
                            array(
                                'value' => 'Submit'
                            )
                        )
                    )
                ))
            )
        ));
    }

}

Unfortunately, I'm obviously missing something because
var_dump($this->_getForm()->getValues());
is giving me array()
. Is my approach completely off? Also, how do you go about preventing
someone from manually going to the personalInformationAction()?

Reply via email to