ZendFramework2(ZF2)のflashMessengerを使いリダイレクト先に完了メッセージを渡す



追加、編集、削除等の処理後に重複処理を避ける為に
リダイレクトするのは良くある処理の一つです。
そこで、リダイレクト先の処理完了画面へ、
メッセージを送りたい事があります。
例えば、『○○の編集が完了しました』等です。
これは、何を処理したかはリダイレクトされる前の画面の話ですので、
前の画面からリダイレクト先へ値を渡さないと
完了画面では何が処理されて来たのかを知る事が出来ません。

そこで、一般的にはセッションの利用を思いつくかと思います。
セッション変数に値をセットし、リダイレクト先でセッションから
値を取得し・・・

ちょっと面倒ですよね?


ZendFramework2(ZF2)では、その辺りの処理を簡単に行える様に
便利なプラグインが用意されています。
その名も『flashMessenger』


今回は、そんなflashMessengerの使用方法をソースコード付きで解説したいと思います

  1. flashMessengerを使って完了メッセージを引き渡そう



flashMessengerを使って完了メッセージを引き渡そう





大前提として、flashMessengerプラグインを使用する為には
AbstractActionControllerかAbstractRestfulController内で使用する必要があります。
勿論、AbstractActionControllerやAbstractRestfulControllerを継承した
コントローラ内のアクションでも使用可能です。

早速、アクションの実装コードを記します





namespace User\Controller;

use Zend\Mvc\Controller\AbstractActionController;

class Hoge extends AbstractActionController

 /* 処理を行うアクション
 ----------------------------------------------------------------------------------*/
 public function processAction()
 {
  // フラッシュマネージャへ受け渡すメッセージを追加する
  $this->flashMessenger()->addMessage( "受け渡すメッセージ" );

  // successActionへリダイレクトする
  return( $this->redirect()->toUrl( 'success' ) );
 }

 /* 処理後に実行するアクション
 ----------------------------------------------------------------------------------*/
 public function successAction()
 {
  // フラッシュマネージャープラグインのハンドルを取得
  $flashMessenger = $this->flashMessenger();

  // 現在の要求中に追加されたものがあるのかチェック
  if( $flashMessenger->hasMessages() ){

   // メッセージの取得(配列)
   $message_array = $flashMessenger->getMessages();

   // メッセージを確認
   echo $message_array[0];

  }
 }
}





processActionは、いわゆる追加や削除、編集等を行うアクションで、
そういった処理後に完了メッセージと共に完了画面へリダイレクトします。

完了画面はsuccessActionに用意し、
受け取ったメッセージを取得する事が出来ます。


hasMessages()でメッセージがあるか確認する事が出来ますので、
メッセージがある時だけ画面に通知するといった処理も可能です。


他にも、flashMessengerプラグインにはいくつかのメソッドが用意されていますので、
一覧を下記に記します。


setSessionManager() 代わりにセッションマネージャを使用する時にはこのメソッドでセットします
getSessionManager() 代わりに使用したセッションマネージャを取得します。
getContainer() フラッシュメッセージが格納されているコンテナのインスタンスを取得します(Zend\Session\Container)
setNamespace() コンテナに特定の名前空間を指定したい時に使用します。
getNamespace() フラッシュメッセージのの名前空間を取得します。
addMessage() セッションのコンテナにメッセージを追加します。
hasMessages() セッションのコンテナ内に名前空間を考慮した任意のメッセージがあるか判定します。
getMessages() セッションコンテナから、現在の名前空間にあったメッセージを取得します。
clearMessages() セッションコンテナ内の、現在の名前空間内のメッセージを全て削除します。
hasCurrentMessages() 全てのメッセージは、現在の要求中に追加されたものか判定します。
getCurrentMessages() 現在の要求の間に追加された全てのメッセージを取得します。
clearCurrentMessages() 現在の要求の間に追加された全てのメッセージを削除します。



とても頻繁に使うプラグインかと思いますので、
なるべく早い段階で動きを把握しておくと良いかも知れません。


コメントをお待ちしています

人気の投稿

Category

Algorithm (2) Android (8) ASP/aspx (1) Blogger (2) C/C++ (1) Chrome (5) CSS (9) Firefox (4) Fortran (1) Google (9) GoogleMap (2) HTML (12) IE (3) Information (4) iOS (2) iPhone/iPad/iPod (2) Java (6) JavaScript (16) jQuery (9) JSP (1) LifeRecipe (5) Linux (2) Macintosh (2) MapKit (4) Marketing (7) MySQL (3) NAMAZU (2) Objective-C (7) Other (7) Perl (1) PHP (9) Python (1) RSS/Atom (2) Ruby (1) Safari (2) SEO (11) Smarty (2) SQL (2) Tex (1) Three.js (1) Twitter (1) TwitterLog (313) UIKit (5) Unix (1) VBA/VBS (1) Windows (5) WordPress (3) Writing (5) XAMPP (1) XML (1) Yahoo (2) ZendFramework2 (14)

Archives