2017-10-05 75 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