首页 文章

Laravel使用会话将数据从控制器传递到视图

提问于
浏览
0

不知何故,我只是通过它来管理它(将数据,数组从控制器传递到视图)

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 中 . 因此,不仅显示旧消息,它甚至是我在应用程序内部的其他位置使用的消息 .

我想知道 session() 调用是否是错误或者我是否需要刷新会话(如果是,如何,何时?)或者我刚刚搞砸了控制器和视图之间的通信,因为我已经看到了(同样here)人们在视图中访问它时使用唯一的变量名,而不是session() . 那么,这可能是一个旧的Laravel版本(我使用的是最新版本)当它只在那时工作或我错过了什么?

谢谢你的建议 .

1 回答

  • 0

    我有问题的是您使用 session()->put('key', 'value)session(['key' => 'value']) 手动存储在会话中的数据 . 当您将 put() 数据输入会话时,它会一直保留到会话过期或手动忘记 .

    但是,如果您只希望数据保留一个响应并在此之后立即删除,则可以使用 flash() 方法 . 这就是 redirect()->with() 功能的工作原理 . 您在 with() 中指定的数据是会话的"flashed",因此它仅持续一个响应 .

    因此,只有在一次响应时才需要将代码更改为会话,或者您需要在显示后将刀片模板更新为手动 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
    

相关问题