0

永続トランザクションの成功または失敗時にユーザーへの応答を処理するプラグインを実装しようとしています。応答が 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'
            ));
        }
    }

}

[F5]キーを使用して挿入アクションを繰り返したくないため、成功時に_forwardを使用できません

前もって感謝します

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