2012-04-26 11 views
0

私は、持続的トランザクションで成功または失敗した場合のユーザーへの応答を処理するプラグインを実装しようとしています。レスポンスがfalseの場合は、フォームのサブミットを実行し、プレースホルダメッセージを表示するアクションに_forwardを使用しますが、レスポンスがtrueの場合は、表示された新しいレコードで参照に_redirectを使用します。プラグイン内のプレースホルダを使用しているZF

私の問題は、_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使用することはできませんキーが挿入アクションを繰り返し、事前に

おかげ

答えて

1

これはフラッシュメッセンジャーが何のためにあるのかです:

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

それはあなたがそうであるようにメッセージを渡すための必要性を取り除く、あなたのセッションにメッセージを格納します。

+0

ありがとうございます。これは私の問題を解決します –

+0

解決済みとしてマークしてください – Ashley

関連する問題