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

时间:2017-01-24 12:36:40

标签: php laravel session laravel-5.3 flash-message

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

他们似乎通过为Http foundationopenread等为会话创建自定义方法,使用Symfony的write包来执行此操作。这是通过使用session_set_save_handler

完成的

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

通过使用该功能,您可以在启动会话或写入会话时实现开放逻辑。但到目前为止,我无法在Laravel代码库中找到闪存数据未设置的直接逻辑。

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

有人可以告诉我Laravel如何处理会话Flash消息吗?

1 个答案:

答案 0 :(得分:2)

Illuminate\Session\Store类中,您可以找到存储会话时调用的save方法。 Aka本质上是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数据都存储在_flash.new中。 保存会话后,_flash.old中的所有数据都将被清除,_flash.new中存储的所有内容都会移至_flash.old_flash.new准备存储下一页呼叫的新数据

如果您想维护Flash消息,例如在ajax调用上,您可以使用会话存储中的reflash()方法将_flash.old中的所有内容移回_flash.new < / p>