Laravel无控制器路由传递Inertia访问参数到Vue3组件问题
解决方案
1. GET方式(路由直接获取查询参数)
你之前接收不到参数的核心原因是Route::inertia默认不会自动把URL查询参数注入到组件Props,需要你手动取出参数再返回。直接在路由第三个参数传入闭包读取请求参数即可,无需创建控制器:
// web.php use Illuminate\Http\Request; Route::inertia('/second', 'Course/Second', function (Request $request) { return [ // 注意参数名要和前端Inertia.get传递的key完全对应 'courseName' => $request->query('courseName', '') ]; });
注意:你之前示例中URL出现的
?name="xxx"和写死参数时的couseName都属于拼写错误,需要和前端传参、组件Props的courseName保持完全一致,否则会接收失败。
2. POST方式实现
Route::inertia仅支持GET/HEAD请求,要使用POST方式不需要单独写控制器,直接在路由闭包中返回Inertia渲染响应即可:
前端代码修改
把Inertia.get替换为Inertia.post:
// first.vue tappedCourse(course: Course): void { const data: secondParams = { courseName: course.name, }; Inertia.post("/second", data as any); },
路由代码修改
// web.php use Illuminate\Http\Request; use Inertia\Inertia; Route::post('/second', function (Request $request) { return Inertia::render('Course/Second', [ 'courseName' => $request->input('courseName', '') ]); });
小提示:POST方式跳转后用户点击浏览器后退按钮会触发表单重发提示,如果不希望出现该提示,可以结合路由重定向+session闪存实现,按需选择即可。
内容的提问来源于stack exchange,提问作者Thiago Valente
相关产品推荐
相关产品推荐

