Laravel Vue Inertia栈重定向传参后Vue侧props接收msg为undefined如何解决?
问题原因
- 你当前使用的
redirect::route('rooms.index', ['msg' => $message])传参写法,是将msg作为路由参数传递。如果你的rooms.index路由没有提前声明msg参数,Laravel会自动将该参数转为URL查询参数,不会自动注入到Inertia的页面Props中,因此Vue组件读取时会显示undefined。 - 即使
rooms.index路由声明了msg参数,你也需要在rooms.index对应的控制器方法中,手动将该参数传递给Inertia渲染方法,才会出现在Vue组件的Props里。
解决方案
方案1:使用闪存消息(推荐,适配操作提示场景)
该方案符合Inertia官方最佳实践,一次性闪存数据在页面刷新后会自动清除,非常适合操作成功/失败提示场景:
- 修改控制器
store方法的重定向代码,改用with方法进行闪存传参:
public function store(Request $request) { $postData = $this->validate($request, [ 'name' => 'required', 'status' => 'required | boolean' ]); Room::create([ 'name' => $postData['name'], 'active' => $postData['status'], ]); $message = "Room Added"; return redirect::route('rooms.index')->with('msg', $message); }
- 打开Laravel项目下的
app/Http/Middleware/HandleInertiaRequests.php中间件,将闪存数据加入全局共享Props:
public function share(Request $request) { return array_merge(parent::share($request), [ 'msg' => fn () => $request->session()->get('msg'), // 原有其他共享参数保留即可 ]); }
- 保持Vue组件原有的
props:['rooms','errors','msg']声明,即可正常在模板中使用{{ msg }}输出提示信息。
方案2:手动传递查询参数
如果你不想修改中间件配置,也可以直接手动把查询参数传递到页面Props:
修改rooms.index对应的控制器方法,手动将查询参数中的msg传入Inertia渲染配置:
public function index(Request $request) { $rooms = Room::all(); return Inertia::render('Rooms/Index', [ 'rooms' => $rooms, 'msg' => $request->query('msg'), ]); }
修改完成后Vue组件即可正常读取msg参数。
内容的提问来源于stack exchange,提问作者AJITHKUMAR S
相关产品推荐
相关产品推荐

