取消设置和重置后会话变量为空

Session Variable empty after unsetting and resetting

我正在使用 Zend Framework 3 和 SessionManager,我正在尝试构建一个控制器插件/视图助手,以在验证一些数据后显示确认对话框。这个想法只是简单地设置一个会话变量,其中包含确认对话所需的一切,通过视图读取它,然后取消设置。但即使是这个简单的循环也会失败。该插件在控制器调用时基本上会执行此操作:

$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 注入了插件和视图助手。当在接收到它的数据后不清除变量时,我从会话变量中获取更改的数据并且它由插件更新,因为它should.But 在第一次读取它后清除变量时,它总是空的。

这是我的 global.php 设置:

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

因为该值是通过引用传递的,当你清除它时,你也清除了读取的信息。

正如我在评论中提到的,我建议使用默认的 falsh messenger 插件,但如果您想创建自己的插件,这里有源代码的提示,它向您展示了如何实现默认的 clear从会话中读取后。

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

此设置实际上是告诉会话容器在“1 跳”后删除该信息,即。以防下次请求。