Laravel 8:为啥没有提交会话

Posted

技术标签:

【中文标题】Laravel 8:为啥没有提交会话【英文标题】:Laravel 8 : Why session does not submittedLaravel 8:为什么没有提交会话 【发布时间】:2021-07-27 20:02:08 【问题描述】:

我想在我的 Controller 方法中添加这样的 warning 会话:

return view('panel.step3' , compact('factor' , 'showStep') )->with('warning' , 'test !');

然后查看panel.step3,我添加了这个:@dd(session('warning'))

但它说:NULL

那么这里出了什么问题?如何正确添加会话?

非常感谢你们的任何想法或建议......

提前致谢。

【问题讨论】:

view() 上使用->with() 不会向会话添加任何内容。您可以通过$warning 访问它。 redirect()->with('warning') 是您使用 session('warning') 的时间。 抱歉,本意是在上面的评论中添加这个,编辑时间已过,如果你想要返回视图时的会话值,你可以在return view(...);之前简单地做session()->flash('warning', 'Test!') @TimLewis 你能把它添加为答案吗? 根据我的个人经验,在处理会话时不要使用dd。如果您使用dd 退出流程,会话的行为方式(有时)会很奇怪。 【参考方案1】:

with() 方法的执行方式因链接位置而异。对于view()

return view('view.name')->with('variable', 'value');

'variable' 将作为变量$variable 提供,而不是通过会话session()->get('variable') 提供。

当您在 redirect() 上使用 with() 时:

return redirect()->route('route.name')->with('variable', 'value');

那么'variable' 可以通过session() 获得,而不是$variable

这是由于请求生命周期;对于view(),它是一个单一的调用链,所以设置一个变量是可以接受的。对于redirect(),它需要执行一个全新的请求,跨调用的变量持久化是通过session逻辑完成的。

如果您希望将session()view() 一起使用,只需执行flash()

session()->flash('variable', 'value');
return view('view.name');

在这种情况下,session()->get('variable') 有效,而$variable 无效。

【讨论】:

【参考方案2】:

因为你只是用数据渲染视图,而不是重定向到另一个动作,所以你没有把任何东西放到会话中。

【讨论】:

以上是关于Laravel 8:为啥没有提交会话的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 7:为啥我的会话 cookie 没有在浏览器中设置?

laravel 4持续数据正在进行 - jquery ajax提交

laravel 4持续数据正在进行 - jquery ajax提交

为啥 Laravel 4 CSRF 令牌不起作用?

为啥我的 $items 没有一组 $item? Laravel 8 电子商务

Laravel TokenMismatchException 会话超时