ZF在插件中使用占位符

时间:2012-04-26 15:58:50

标签: zend-framework plugins placeholder

我正在尝试实现一个插件,用于处理持久性事务成功或失败时对用户的响应。当响应为false时,我使用_forward来执行表单提交的操作并显示我的占位符消息,但是当响应为true时,我使用_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]键重复插入动作

提前致谢

1 个答案:

答案 0 :(得分:1)

这就是Flash Messenger的用途:

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

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