我目前正在尝试实现一种闪存会话数据的方法,类似于Laravel处理闪存数据的方式。我知道Laravel会覆盖由session_start等函数调用的本机会话方法。
他们似乎通过为Http foundation
,open
,read
等为会话创建自定义方法,使用Symfony的write
包来执行此操作。这是通过使用session_set_save_handler
:
http://php.net/manual/en/function.session-set-save-handler.php
通过使用该功能,您可以在启动会话或写入会话时实现开放逻辑。但到目前为止,我无法在Laravel代码库中找到闪存数据未设置的直接逻辑。
在会话的write
功能之前取消设置Flash数据是有意义的。这样您就可以为将来的请求取消设置,并确保它只会在您的代码终止时发生。
有人可以告诉我Laravel如何处理会话Flash消息吗?
答案 0 :(得分:2)
在Illuminate\Session\Store
类中,您可以找到存储会话时调用的save
方法。 Aka本质上是session_set_save_handler
。
在该行上调用$this->ageFlashData();
方法。
该方法包含以下代码
$this->forget($this->get('_flash.old', []));
$this->put('_flash.old', $this->get('_flash.new', []));
$this->put('_flash.new', []);
因此,在页面调用中,所有Flash数据都存储在_flash.new
中。
保存会话后,_flash.old
中的所有数据都将被清除,_flash.new
中存储的所有内容都会移至_flash.old
。 _flash.new
准备存储下一页呼叫的新数据
如果您想维护Flash消息,例如在ajax调用上,您可以使用会话存储中的reflash()
方法将_flash.old
中的所有内容移回_flash.new
< / p>