不知何故,我只是使用
来管理它(将数据,数组从控制器传递到视图)return redirect('whatever')->with('arrayName', $arrayName);
在视图中通过
访问它 @if(!is_null(session('arrayName')))
<div class="alert alert-{{ session('arrayName')['something'] }} alert-dismissable">
// more code goes here
@endif
现在这似乎是一个会话,我正在使用这种技术以信息的形式传递数据(例如成功创建XY,删除,等等)(使用相同的消息)数组的名称),现在又一次发生信息显示在不应该的页面上(因为上面的HTML在每个HTML /刀片页面内部,以便始终有机会显示消息/警报),因为它仍然存储在会话中。因此,不仅显示旧消息,它甚至是我在应用程序内部的其他位置使用的消息。
我想知道session()
调用是否是错误,或者我是否需要刷新会话(如果是,如何以及何时?)或者我是否只是搞砸了控制器和视图之间的通信,因为我已经看到(同样here)人们在视图中访问它时使用唯一的变量名,而不是session()。那么,这可能是一个旧的Laravel版本(我使用的是最新版本)当它只在那时工作或我错过了什么?
感谢您的建议。
答案 0 :(得分:0)
我猜测您遇到问题的数据是您使用session()->put('key', 'value)
或session(['key' => 'value'])
手动存储在会话中的数据。当您将put()
数据加入会话时,它会一直保留到会话过期或手动忘记。
但是,如果您只希望数据保留一个响应并在此之后立即删除,则可以使用flash()
方法。这就是redirect()->with()
功能的工作原理。您在with()
中指定的数据会“闪现”到会话中,因此它只会持续一个响应。
因此,您可以将代码更改为“闪存”数据,只需一个响应时,或者您需要更新刀片模板,以便在显示数据后手动forget()
数据:
@if(!is_null(session('arrayName')))
<div class="alert alert-{{ session('arrayName')['something'] }} alert-dismissable">
// more code goes here
@php
session()->forget('arrayName')
@endphp
@endif