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提交