>
> You'll probably want to store the data from validating the subform in
> your session so you can retrieve it later; otherwise, your data will be
> lost. There's a variety of ways to do that -- using $_SESSION directly,
> or using Zend_Session -- so I won't go into details.
I just found the persistData(), thought it doesn't appear to be used
anywhere. I did some more hacking and added Zend_Session_Namespace into the
mix. I'll check out the Helper proposal to see if I'm missing anything.
In case anyone wanted to see my current, semi-working example, here ya go:
<?php
require_once 'ApplicationController.php';
require_once 'Zend/Form.php';
require_once 'Zend/Session/Namespace.php';
class IndexController extends ApplicationController
{
public function siteInformationAction()
{
$subform = $this->_getForm()->getSubForm('site_information');
if ($this->getRequest()->isPost() &&
$subform->isValid($this->getRequest()->getPost())) {
$subform->persistData();
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())) {
$subform->persistData();
$this->_getForm()->process();
exit;
}
$this->view->form = $subform;
$this->render('form');
}
private function _getForm()
{
return new Site_Form_Create();
}
}
class Site_Form_Create extends Zend_Form
{
public function __construct()
{
parent::__construct(array(
'method' => 'POST',
'subforms' => array(
'site_information' => new
Site_Form_Create_SiteInformation(),
'personal_information' => new
Site_Form_Create_PersonalInformation()
)
));
}
public function process()
{
foreach ($this->getSubForms() as $subform) {
var_dump($subform->getValues());
}
}
}
class Site_Form_Create_SiteInformation extends Zend_Form
{
public function __construct()
{
parent::__construct(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'
)
)
)
));
foreach ($this->_getSession() as $key => $value) {
$this->getElement($key)->setValue($value);
}
}
public function persistData()
{
$session = $this->_getSession();
foreach ($this->getValues() as $key => $value) {
$session->$key = $value;
}
}
private function _getSession()
{
return new
Zend_Session_Namespace('Site_Form_Create_SiteInformation');
}
}
class Site_Form_Create_PersonalInformation extends Zend_Form
{
public function __construct()
{
parent::__construct(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'
)
)
)
));
foreach ($this->_getSession() as $key => $value) {
$this->getElement($key)->setValue($value);
}
}
public function persistData()
{
$session = $this->_getSession();
foreach ($this->getValues() as $key => $value) {
$session->$key = $value;
}
}
private function _getSession()
{
return new
Zend_Session_Namespace('Site_Form_Create_PersonalInformation');
}
}