【问题标题】:Session Variable empty after unsetting and resetting取消设置和重置后会话变量为空
【发布时间】:2018-03-16 18:12:54
【问题描述】:

我正在使用 Zend Framework 3 和 SessionManager 并且我试图构建一个控制器插件/视图助手以在验证某些 Data 后显示确认对话框。这个想法只是简单地设置一个包含确认对话所需的所有内容的 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
]

【问题讨论】:

标签: php session zend-framework3


【解决方案1】:

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

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

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

此设置实际上是告诉会话容器在“1 跳”之后丢弃该信息,即。如果有下一个请求。

【讨论】:

  • 谢谢,我不知道为什么我没有立即想到 Flash Messenger
猜你喜欢
  • 2016-10-01
  • 2013-02-17
  • 2023-01-23
  • 1970-01-01
  • 2017-08-09
  • 2015-03-11
  • 2014-03-18
  • 2010-11-04
相关资源
最近更新 更多