Laravel 9中如何简化多条Flash闪存消息的创建代码
Laravel 9 批量设置Flash闪存消息的实现方案
原有写法失效原因
view()->with()的作用是直接向模板注入变量,并不会将数据写入Session闪存空间,和Flash消息的实现逻辑完全不同,自然无法生效。
要注意区分两个with的逻辑差异:
redirect()->with():默认将传入数据写入Session闪存,用于重定向后的跨请求传值view()->with():仅给当前渲染的模板传变量,不涉及Session操作
方案1:原生支持的批量闪存(最推荐,零额外配置)
Laravel 9的session()->flash()原生支持传入关联数组实现批量设置,和逐行调用单行flash的效果完全一致,可以直接替换原有三行代码:
// 批量写入闪存 session()->flash([ 'status' => 'error', 'title' => 'test title', 'message' => 'test message' ]); // 正常返回视图即可 return view('panel.codes.CodeCrud.create', [ 'categories' => collect(), 'cards' => collect(), ]);
方案2:自定义响应宏实现链式调用
如果你习惯链式写法、不想单独拆分session调用,可以在AppServiceProvider的boot方法中注册自定义响应宏:
// app/Providers/AppServiceProvider.php public function boot() { \Illuminate\Http\Response::macro('withFlash', function (array $flashData) { session()->flash($flashData); return $this; }); }
注册完成后就可以直接在返回视图时链式调用批量闪存:
return view('panel.codes.CodeCrud.create', [ 'categories' => collect(), 'cards' => collect(), ])->withFlash([ 'status' => 'error', 'title' => 'test title', 'message' => 'test message', ]);
补充:重定向场景的原生批量闪存
如果是重定向而非直接返回视图的场景,本身就原生支持数组形式的批量闪存,不需要额外处理:
return redirect()->route('你的路由名')->with([ 'status' => 'error', 'title' => 'test title', 'message' => 'test message', ]);
内容的提问来源于stack exchange,提问作者khassepaz
相关产品推荐
相关产品推荐

