Laravel apiResource路由匹配异常:请求错误指向控制器方法
Laravel apiResource 路由匹配冲突解决
你的问题是Laravel路由匹配顺序导致的:Laravel会按照路由定义的先后顺序匹配请求,Route::apiResource('tasks', TasksController::class)会生成包含GET /tasks/{id}的RESTful路由,这条路由的占位符{id}会匹配任意字符串,所以当请求GET /api/tasks/status时,会被优先匹配到TasksController的show($id)方法,把status当作id参数传入,而非匹配后面的TasksStatusController的index()方法。
针对Laravel 6.x版本,有两种可行的解决方式:
1. 调整路由定义顺序
把更具体的路由(tasks/status)放在通用路由(tasks)前面,确保请求先匹配到精准的路由:
Route::apiResource('tasks/status', TasksStatusController::class); Route::apiResource('tasks', TasksController::class);
2. 给通用路由添加参数约束
如果你的任务ID是数字类型,可以给tasks路由的id参数添加正则约束,限制只有数字能匹配show方法,这样status这类非数字字符串就会跳过该路由,匹配后面的tasks/status:
Route::apiResource('tasks', TasksController::class)->where('id', '[0-9]+'); Route::apiResource('tasks/status', TasksStatusController::class);
你可以根据自己的业务场景选择其中一种方案,两种方式都能解决路由匹配冲突的问题。
内容的提问来源于stack exchange,提问作者Paulo Teixeira
相关产品推荐
相关产品推荐

