Laravel访问/gigs/create路由错误跳转至/gigs/{id}路由问题
Laravel路由匹配冲突解决方法
核心原因
Laravel路由遵循自上而下优先匹配规则,你当前将带通配参数的路由/gigs/{id}定义在固定路径路由/gigs/create之前,访问/gigs/create时系统会优先匹配到前者,将create识别为id参数传入,所以触发了错误的控制器方法。
解决方案
方案一:调整路由定义顺序(最直接)
将无参数的固定路径路由放在通配参数路由之前,修改web.php的路由定义顺序即可:
// 固定路径路由放前面 Route::get('/gigs/create', [GigsController::class, 'create'])->name('clientside.gigs.create'); // 通配参数路由放后面 Route::get('/gigs/{id}', [GigsController::class, 'info'])->name('clientside.gigs_info');
方案二:给参数增加正则约束(更严谨,推荐搭配使用)
给/gigs/{id}路由的id参数增加格式限制,要求必须为数字,这样非数字的create就不会匹配到该路由:
Route::get('/gigs/{id}', [GigsController::class, 'info']) ->name('clientside.gigs_info') ->where('id', '[0-9]+'); // 限定id仅能为正整数
两种方案可以同时使用,能避免后续新增同层级路由时再次出现同类匹配冲突。
内容的提问来源于stack exchange,提问作者n9p4
相关产品推荐
相关产品推荐

