Zend如何在重定向后重新填充表单?

时间:2014-07-28 09:03:05

标签: forms zend-framework

我正在寻找重定向后重新填充表单的解决方案。

我正在使用Zend flash消息来切换操作错误,并使用重定向方法显示它。

$this->getHelper('FlashMessenger')->addMessage('Sauvegarde réalisée !');
$this->redirect('/control/action');

1 个答案:

答案 0 :(得分:1)

在会话中设置POST数据,在重定向后检索它并从会话中取消设置。

E.g。

$userSession = new Zend_Session_Namespace('user_session');
$userSession->formPostData = $this->getRequest()->getPost();
$this->getHelper('FlashMessenger')->addMessage('Sauvegarde réalisée !');
$this->redirect('/control/action');

在重定向后的操作中,请使用以下代码:

$userSession = new Zend_Session_Namespace('user_session');
$formData = $userSession->formPostData;
$formObject = new yourZendForm();
$formObject->populate($formData);
unset($userSession->formPostData);

其他替代解决方案是,而不是重定向到另一个操作,使用_forward在请求中发布数据。

E.g。

$this->getHelper('FlashMessenger')->addMessage('Sauvegarde réalisée !');
$formData = $userSession->formPostData = $this->getRequest()->getPost();
$this->_request->setPost(array('formData' => $formData));
$this->_forward('action', 'controller', 'module');

将控制转发给其他操作后,使用getPost检索数据,如下所示:

 if($this->getRequest()->isPost()) {
    $previousFormData = $this->getRequest()->getPost();
    $formObject = new yourZendForm();
    $formObject->populate($previousFormData);
}