我正在使用Zend Framework 3和SessionManager,我试图构建一个控制器插件/视图助手,以在验证某些数据后显示确认对话框。这个想法只是设置一个Session变量,其中包含确认对话需要的所有内容,通过视图读取它并取消设置。但即使这个简单的循环也失败了插件在控制器调用时基本上执行此操作:
$dataArray = [
'some_data' => 'data'
];
$this->sessionManager->getStorage()->confirmDialog = $dataArray;
在layout.phtml中的我调用我的视图Helper来执行此操作:
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 :(得分:1)
因为该值是通过引用传递的,所以当您清除它时,也会用它清除读取信息。
正如我在评论中提到的,我建议使用默认的falsh messenger插件,但是如果你想创建自己的插件,这里有一个来自该源代码的提示,它告诉你如何在阅读后实现默认的清除来自会议。
此设置实际上告诉会话容器在“1跳”之后删除该信息,即。如果是下一个请求。