【问题标题】:Laravel passing data from controller to view using sessionsLaravel 使用会话将数据从控制器传递到视图
【发布时间】:2017-09-16 16:51:12
【问题描述】:

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

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 版本(我使用的是最新版本)有关,当时它只能在当时工作,或者我错过了什么?

感谢您的建议。

【问题讨论】:

  • 为什么不用$request->session()->flash('arrayName', '任务成功!'); ...
  • @Serge 这如何与我之前使用的函数``redirect()->with()` 配合使用?请详细说明。

标签: php laravel session model-view-controller


【解决方案1】:

我猜您遇到问题的数据是您使用session()-&gt;put('key', 'value)session(['key' =&gt; 'value']) 手动存储在会话中的数据。当您put() 数据进入会话时,它会一直保留在那里,直到会话过期或被手动忘记。

但是,如果您只希望数据保留一个响应并在此之后立即删除,您可以使用flash() 方法。这就是redirect()-&gt;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

【讨论】:

  • 感谢您的回复。正如我在帖子中所说,我没有使用session()-&gt;put,而只使用redirect()-&gt;with(),这就是我如此想知道的原因。还有一点,它只是说“已成功添加 XY”(虽然它不属于那里)作为消息。
猜你喜欢
  • 2020-04-25
  • 2012-08-09
  • 2017-01-29
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
  • 1970-01-01
  • 2015-07-25
  • 2017-09-03
相关资源
最近更新 更多