Laravel 9.x注册后返回成功视图时Session消息未传递问题
问题根源
Laravel中view()返回视图时调用with()传递的参数是视图层专属变量,不会自动写入Session存储,因此你在视图中通过Session::has('message')判断时无法命中条件,对应内容自然不会渲染。
这里有个容易混淆的规则:只有调用redirect()重定向后链式调用with(),参数才会自动以闪存形式存入Session,直接返回视图的with()不会触发Session写入。
可选修复方案
二选一即可,不要同时混用。
- 方案1:适配现有控制器逻辑,修改视图读取方式
不需要调整控制器代码,直接把视图中读取Session的逻辑改成读取普通视图变量即可,修改对应代码块为:@if (isset($message)) <section class="popup"> <div class="popup-inner"> <div class="popup-content"> <div class="img"> <img src="assets/img/popup/popup.jpg" alt="Image"> </div> <div class="content text-center"> <p class="">{{ $message }}</p> <h6 class="heading">REGISTRATION SUCCESSFUL!</h6> <a href="{{ route('login') }}" class="button color-2 login-submit">LOGIN TO YOUR ACCOUNT</a> </div> </div> </div> </section> @endif - 方案2:保留现有视图逻辑,修改控制器传参方式
如果你希望统一用Session闪存的方式传递提示消息(方便后续重定向场景复用逻辑),就调整控制器的registered方法,先手动把消息闪存到Session,再返回视图:protected function registered(Request $request, $user) { session()->flash('message', 'Your registration was successful. Click the button below to login to your account'); return view('frontend.pages.register-success'); }
内容的提问来源于stack exchange,提问作者Morri
相关产品推荐
相关产品推荐

