Laravel 如何取消设置会话闪存数据?

How does Laravel unset session flash data?

我目前正在尝试实现一种闪存会话数据的方式,类似于 Laravel 处理闪存数据的方式。我知道 Laravel 会覆盖由 session_start.

等函数调用的本机会话方法

他们似乎通过为会话的 openreadwrite 等创建自定义方法来使用 Symfony 的 Http foundation 包来做到这一点。这是通过使用 session_set_save_handler:

完成的

http://php.net/manual/en/function.session-set-save-handler.php

通过使用该函数,您可以在启动会话或写入会话时实现开放逻辑。但到目前为止,我无法在 Laravel 代码库中找到直接逻辑,其中 flash 数据被取消设置。

在会话的 write 功能之前取消设置闪存数据是有意义的。这样您就可以为将来的请求取消设置,并确保它只会在您的代码终止时发生。

谁能告诉我 Laravel 如何处理会话闪现消息?

Illuminate\Session\Store class 中,您可以找到存储会话时调用的 save 方法。本质上也就是 session_set_save_handler

https://github.com/laravel/framework/blob/7acc98e112cce4e04f30c7ee4fc0a53dbc5c425b/src/Illuminate/Session/Store.php#L261

在那一行调用了 $this->ageFlashData(); 方法。

该方法包含以下代码

    $this->forget($this->get('_flash.old', []));
    $this->put('_flash.old', $this->get('_flash.new', []));
    $this->put('_flash.new', []);

因此,在页面调用中,所有闪存数据都存储在 _flash.new 中。 保存会话后,_flash.old 中的所有数据都将被清除,_flash.new 中存储的所有内容都将移至 _flash.old_flash.new 准备为下一次页面调用存储新数据

如果你想维护 flash 消息,例如在 ajax 调用中,你可以在会话存储中使用 reflash() 方法,它将 _flash.old 中的所有内容移回_flash.new