Laravel Lumen路由分组内访问路由参数提示闭包参数过少报错如何解决
错误原因
路由组$router->group()的闭包只会传入路由实例这1个参数,你写的闭包要求接收$request和$module两个参数,自然会触发参数不足的报错。
另外路由前缀里的{module}占位符属于路由参数,只有当实际请求匹配到该路由组下的具体路由时才会被解析,不会在定义路由组的阶段就直接注入到闭包中。
解决方法
如果你的需求是根据不同的module加载对应的路由文件,可以先枚举所有支持的模块,循环定义路由组即可,示例代码如下:
$app->router->group([ 'namespace' => 'App\\Http\\Controllers', ], function ($router) use ($version) { // 此处可以手动定义模块列表,也可以扫描routes/v1目录下的路由文件自动获取 $availableModules = ['user', 'goods', 'order']; foreach ($availableModules as $module) { $router->group([ 'namespace' => $version, 'prefix' => "api/$version/{contest}/$module", 'middleware' => 'App\\Http\\Middleware\\COMMON\\DefineContest', ], function ($router) use ($module) { require __DIR__ . "/../routes/v1/{$module}.routes.php"; }); } });
如果后续在处理请求的过程中需要获取路由里的module参数,可以在中间件或者控制器方法中调用$request->route('module')获取。
内容的提问来源于stack exchange,提问作者Bernard
相关产品推荐
相关产品推荐

