Laravel路由跳转异常:点击add-new-information跳转到infoadmin页报错
问题原因
Laravel路由匹配遵循从上到下优先匹配规则,你当前路由配置中,带动态参数{id}的admin-informations路由定义在add-new-information路由之前:
// 先匹配这条,会把路径中的add-new-information当做{id}参数传入 Route::get('/informations/{id}', [App\Http\Controllers\InformationController::class, 'indexAdminInfo'])->name('admin-informations'); Route::get('/informations/add-new-information', [App\Http\Controllers\InformationController::class, 'add'])->name('add-new-information');
当你访问/admin/informations/add-new-information时,系统会直接将add-new-information识别为{id}的参数值,命中admin-informations路由,进入indexAdminInfo方法,所以不会走到add方法对应的路由。
修复方案
- 调整路由定义顺序,把无动态参数的路由放在带参数路由的前面:
Route::group(['prefix' => 'admin'], function() { Route::get('/informations', [App\Http\Controllers\InformationController::class, 'index'])->name('informations'); // 先放固定路径的路由 Route::get('/informations/add-new-information', [App\Http\Controllers\InformationController::class, 'add'])->name('add-new-information'); // 再放带动态参数的路由 Route::get('/informations/{id}', [App\Http\Controllers\InformationController::class, 'indexAdminInfo'])->name('admin-informations'); });
- (可选优化)给
{id}参数增加正则约束,仅当参数为数字时才命中该路由,进一步避免匹配冲突:
Route::get('/informations/{id}', [App\Http\Controllers\InformationController::class, 'indexAdminInfo'])->name('admin-informations')->where('id', '[0-9]+');
修复后可以执行php artisan route:list命令确认路由匹配顺序是否正确。
内容的提问来源于stack exchange,提问作者Tim Sobrecarey
相关产品推荐
相关产品推荐

