追加、編集、削除等の処理後に重複処理を避ける為に
リダイレクトするのは良くある処理の一つです。
そこで、リダイレクト先の処理完了画面へ、
メッセージを送りたい事があります。
例えば、『○○の編集が完了しました』等です。
これは、何を処理したかはリダイレクトされる前の画面の話ですので、
前の画面からリダイレクト先へ値を渡さないと
完了画面では何が処理されて来たのかを知る事が出来ません。
そこで、一般的にはセッションの利用を思いつくかと思います。
セッション変数に値をセットし、リダイレクト先でセッションから
値を取得し・・・
ちょっと面倒ですよね?
ZendFramework2(ZF2)では、その辺りの処理を簡単に行える様に
便利なプラグインが用意されています。
その名も『flashMessenger』
今回は、そんな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() | 現在の要求の間に追加された全てのメッセージを削除します。 |
とても頻繁に使うプラグインかと思いますので、
なるべく早い段階で動きを把握しておくと良いかも知れません。

Categories: