2017-10-05 79 views
0

使用Zend Framework 3和SessionManager的Im,並試圖構建控制器插件/視圖幫助器,以在驗證某些數據後顯示確認對話框。這個想法僅僅是設置一個Session變量,其中包含確認對話需要的所有內容,通過視圖讀取它並將其解除。但即使這個簡單的循環失敗。會話變量在清除和重置後爲空

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

在layout.phtml我打電話給我的視圖助手它做到這一點:

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

我做注射sessionManager的插件和兩個在由控制器調用該插件基本上做到這一點查看幫手。在接收到它的數據後,如果不清除變量,我會從會話變量中獲取已更改的數據,並且它會由插件更新,但在第一次讀取變量後清除變量時,變量始終爲空。

這裏我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 messenger插件,但是如果您想創建自己的插件,請參閱源代碼中的提示,它會告訴您如何在獲得默認清除後從會話中讀取。

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

此設置實際上是告訴會話容器掉落後「一跳」,即信息。在下一次請求的情況下。

+0

謝謝我不知道爲什麼我沒有立即想到Flash Messenger – Lapskaus