Laravel路由分组中无法传递路由参数的问题排查
Laravel路由配置错误排查与修正
错误点分析
路由分组闭包参数误用
路由分组的闭包函数接收的是Illuminate\Routing\Router实例,并非URL中的路由参数。你把$projectid作为闭包参数传入,会导致类型不匹配的错误,这就是触发Argument #1 ($projectid) must be of type int, Illuminate\Routing\Router given的原因。路由正则表达式无效
你写的where(["projectid"=>"[0..9]+"])是错误的正则规则,正确的数字匹配表达式应该是[0-9]+或者\d+。控制器方法参数错误
add方法处理的是POST新增请求,URL中并没有projectid参数,不需要在方法中声明int $projectid,否则会触发参数缺失的异常。缺少/api前缀
你需要的路由是/api/projects开头,但当前路由仅配置了projects前缀,没有包含api,导致路由无法匹配预期的URL路径,这是出现404的核心原因之一。
修正后的代码
路由文件
Route::prefix('api') ->group(function(): void { Route::prefix('projects') ->group(function(): void { Route::get('/', [ProjectsController::class, 'all']); Route::post('/', [ProjectsController::class, 'add']); Route::prefix('{projectid}') ->where(['projectid' => '[0-9]+']) ->group(function(): void { Route::get('/', [ProjectsController::class, 'one']); Route::put('/', [ProjectsController::class, 'update']); Route::delete('/', [ProjectsController::class, 'delete']); }); }); });
控制器文件
<?php namespace App\Http\Controllers; class ProjectsController extends SecureController { public function all() { return "projects"; } public function one(int $projectid) { return "project " . $projectid; } public function add() { // 处理新增逻辑,参数从请求中获取,比如 request()->input('xxx') } public function update(int $projectid) { // 处理更新逻辑 } public function delete(int $projectid) { // 处理删除逻辑 } }
内容的提问来源于stack exchange,提问作者Simple Fellow
相关产品推荐
相关产品推荐

