0

我正在使用 Zend 1.12 和 php 5.4.3 并且 flashMessenger->getMessages() 突然停止在控制器操作中工作。

在AController中,创建了某种类型的账户,创建它需要9个步骤,所以我有9个动作create1-9Action

在每一步中,我使用 flashmessenger 将表单数据传递到下一步。这是一个动作的典型结构:

public function create5Action()
{
  $form = new My_Form();
  $messages = $this->_helper->flashMessenger->getMessages();
  $data = $messages[0];
  if ($this->_request->isPost())
  {
    if ($form->isValid($this->_request->getPost()))
    {
       /* form treatment */

      $this->_helper->flashMessenger->addMessage($data);
      $this->_redirect($this->_helper->url("create6", "A", null)); // redirect to next step
    }
  }

  $this->_helper->flashMessenger->addMessage($data);
  $this->view->form = $form;
}

在此操作(create5)中,从 create4Action 到达时数据是完整的,之前将其作为消息添加时是完整的$this->view->form = $form;,但是当我将新元素添加到表单并提交时,它$messages = $this->_helper->flashMessenger->getMessages();是空的,我不知道为什么,因为它正在为所有其他操作工作。

4

1 回答 1

0

您可能错过了elseisPost()循环中添加。

public function create5Action()
{
  $form = new My_Form();
  $messages = $this->_helper->flashMessenger->getMessages();
  $data = $messages[0];
  if ($this->_request->isPost())
  {
    if ($form->isValid($this->_request->getPost()))
    {
       /* form treatment */

      $this->_helper->flashMessenger->addMessage($data);
      $this->_redirect($this->_helper->url("create6", "A", null)); // redirect to next step
    }
  } else {

      $this->_helper->flashMessenger->addMessage($data);
      $this->view->form = $form;
    }
}

然而,这不是 flash messenger 的预期用途。我认为您的问题的一部分是每次发出请求时,都会postDispatch()在调度循环的部分期间清除 flash messenger 命名空间。

您最好使用自己的Zend_Session_Namespace实例,而不是依赖 flash messenger 正在使用的实例。

public function create5Action()
    {
      $session = new Zend_Session_Namespace('data');//set elsewhere and forwarded and can be persistent
      $form = new My_Form();     
      $data = $session->data;
      if ($this->_request->isPost())
      {
        if ($form->isValid($this->_request->getPost()))
        {
           /* form treatment */

          $session->newData = $newData;//forward data if needed, old data will persist as you require
          $this->_redirect($this->_helper->url("create6", "A", null)); // redirect to next step
        }
      } else {
          $this->view->form = $form;
        }
    }
于 2013-01-23T10:19:57.767 回答