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();null になり、理由がわかりません。他のすべてのアクションで機能しています。

4

1 に答える 1

0

をループに追加し忘れた可能性がelseあります。isPost()

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;
    }
}

ただし、これはフラッシュ メッセンジャーの想定される用途ではありません。あなたの問題の一部は、リクエストが行われるたびpostDispatch()に、ディスパッチループの部分でフラッシュメッセンジャーの名前空間がクリアされることだと思います。

フラッシュ メッセンジャーが使用しているインスタンスに依存するのではなく、独自のZend_Session_Namespaceインスタンスを使用する方がよい場合があります。

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 に答える