0

我正在尝试实现一个插件来处理对持久事务中成功或失败的用户的响应。当响应为假时,我对执行表单提交的操作使用 _forward 并显示占位符消息,但是当响应为真时,我使用 _redirect 来浏览并显示新记录。

我的问题是,当我使用 _redirect 时,浏览器不显示占位符消息。我将在这里显示代码:

/**
 * Plugin
 */
class Application_Plugin_PostMessage extends Zend_Controller_Plugin_Abstract
{

  public function postDispatch(Zend_Controller_Request_Abstract $request)
  {
      $message = $request->getParam('message');
      $error = $request->getParam('error');

      if (null !== $message || null !== $error) {
          $layout = Zend_Layout::getMvcInstance();
          $view = $layout->getView();
          $placeHolder = $view->placeholder('message');
          $placeHolder->setPostfix('</div>');

          if (null !== $error) {
              $placeHolder->setPrefix('<div class="errorMessage">')
                          ->append($error);
          }
          elseif (null !== $message) {
              $placeHolder->setPrefix('<div class="infoMessage">')
                          ->append($message);
          }
      }
  }

}

/**
 * Controller
 */
class My_FooController extends Zend_Controller_Action
{
    public function init()
    {
        $front = Zend_Controller_Front::getInstance();
        $front->registerPlugin(new Application_Plugin_PostMessage());
    }

    ...

    public function browseAction()
    {
        ...
        // No message is shown here on redirect
        ...
    }

    public function newAction()
    {
        ...
        // This code shows the placeholder on _forward call
        ...
    }

    public function insertAction()
    {
        if(true) {
            return $this->_redirect('/my/foo/browse?message='
                 . urlencode("success message"));
        }
        else {
            return $this->_forward('new', null, null, array(
                'error' => 'error messsage'
            ));
        }
    }

}

我不能在成功时使用 _forward,因为我不想使用 [F5] 键重复插入操作

提前致谢

4

1 回答 1

1

这就是 Flash Messenger 的用途:

http://framework.zend.com/manual/en/zend.controller.actionhelpers.html#zend.controller.actionhelper.flashmessenger.basicusage

它将消息存储在您的会话中,无需像您一样传递消息。

于 2012-04-26T16:04:18.813 回答