Laravel Breeze+Inertia+Vue3闪存消息正常实现方法
问题原因
该异常是Inertia-Laravel默认闪存共享逻辑与自定义共享逻辑执行顺序冲突导致:
- 调用
redirect()->with('success', 'xxx')传递闪存数据时,Inertia默认配置会自动将所有顶层会话闪存键挂载为根级props,也就是你观察到的page.props.success字段 - 你在
HandleInertiaRequests中用闭包定义flash属性属于懒加载属性,闭包执行时默认逻辑已经将闪存数据从session中消费清空,因此flash.success始终读取到null
修复方案
1. 关闭默认顶层闪存共享
打开config/inertia.php配置文件,注释掉默认的闪存共享配置,阻止框架自动将顶层闪存挂到根props:
// config/inertia.php return [ // 其余配置保持不变 'share' => [ // 注释默认闪存共享项 // 'flash' => Inertia\SharedProp::flash(), // errors等其他默认共享项可保留 'errors' => Inertia\SharedProp::errors(), ], ];
2. 校验中间件执行顺序
打开app/Http/Kernel.php,确认web中间件组中StartSession中间件排在HandleInertiaRequests前面,保证读取session时闪存数据已正常加载:
protected $middlewareGroups = [ 'web' => [ // 其他前置中间件 \Illuminate\Session\Middleware\StartSession::class, // 其他中间件 \App\Http\Middleware\HandleInertiaRequests::class, // 其他后置中间件 ], ];
3. 清除配置缓存生效
执行artisan命令清除配置缓存,让修改生效:
php artisan config:clear
修复完成后再次触发提交跳转,即可在page.props.flash路径下正常读取到success、error闪存值,根props下不会再出现冗余的顶层闪存字段,全页重载、Inertia异步跳转两种场景下闪存逻辑都可正常运行。
内容的提问来源于stack exchange,提问作者KinsDotNet
相关产品推荐
相关产品推荐

