2017-10-05 10 views
0

Zend Framework 3とSessionManagerを使用して、いくつかのデータの検証後に確認ダイアログを表示するコントローラプラグイン/ビューヘルパーを作成しようとしています。アイデアは、確認ダイアログが必要とするすべてのものをSession変数に設定し、ビューで読み込み、設定を解除するだけでした。しかし、この単純なサイクルでも失敗します。設定を解除してリセットした後にセッション変数が空になる

public function __invoke() { 
    $data = $this->sessionManager->getStorage()->confirmDialog; 
    $this->sessionManager->getStorage()->clear('confirmDialog'); 
    return $this->getDialog($data); 
} 

私はプラグインとの両方にSessionManagerのを注入実行します。私はこれを行う私のビューヘルパーを呼び出すlayout.phtmlで

$dataArray = [ 
     'some_data' => 'data' 
    ]; 
    $this->sessionManager->getStorage()->confirmDialog = $dataArray; 

:コントローラによって呼び出されたとき、プラグインは基本的にこれを行いますヘルパーを表示する。データを受け取った後に変数をクリアしないと、セッション変数から変更されたデータを取得し、プラグインによって更新されます。最初に変数を読み取った後に変数をクリアすると、その変数は常に空になります。

ここに私のglobal.phpセットアップ:

'session_manager' => [ 
    'validators' => [ 
     RemoteAddr::class, 
     HttpUserAgent::class, 
    ] 
], 
'session_storage' => [ 
    'type' => SessionArrayStorage::class 
] 
+0

なぜ単にflashmessengerプラグインを使用しないのですか? https://docs.zendframework.com/zend-mvc-plugin-flashmessenger/ – LWjuniOr

答えて

1

値がそれたときに明確に、参照によって渡されるため、あなたもそれで読み出した情報をクリアします。

私がコメントで述べたように、デフォルトのfalshメッセンジャープラグインを使用することをお勧めしますが、独自のプラグインを作成する場合は、ソースコードのヒントを参考にしてくださいセッションから読み込みます。

https://github.com/zendframework/zend-mvc-plugin-flashmessenger/blob/843654a029a19c38e0c3b2e940e59edec75c3e4f/src/FlashMessenger.php#L165

この設定は、実際には「1つのホップ」、すなわち後にその情報を削除するには、セッションコンテナを伝えています。次回のリクエストの場合

+0

なぜ私はimmediatlyフラッシュメッセンジャーを考えるかわからない – Lapskaus

関連する問題