Slim PHP中如何通过Request实例获取路由参数?
从Request中获取路由参数的可行方法
针对你在中间件中尝试获取路由参数遇到的问题,下面提供可行的解决思路和修正后的代码:
1. 正确获取路由对象并读取参数
首先要确认$request->getAttribute('route')是否能拿到有效的路由对象(有时中间件注册顺序不对会导致这个值为null),再通过路由对象的方法获取参数:
class JwtMiddleware { public function __construct($settings) { } public function __invoke(Request $request, RequestHandler $handler) { $route = $request->getAttribute('route'); // 先判断路由对象是否存在,避免报错 if (!$route) { // 路由未匹配时直接继续请求流程 return $handler->handle($request); } // 获取单个指定参数 $userId = $route->getArgument('user_id'); // 如需获取所有路由参数,使用此方法 $allRouteArgs = $route->getArguments(); // 后续业务逻辑 /* // code // */ return $handler->handle($request); } }
2. 排查常见问题点
- 路由定义检查:确认你的路由规则里确实包含
user_id参数,比如路由定义为$app->get('/users/{user_id}', ...) - 中间件注册顺序:Slim框架中,路由匹配逻辑由内置路由中间件处理,若你把
JwtMiddleware注册在路由中间件之前,此时route属性还未被设置,会导致获取不到参数。确保中间件在路由中间件之后注册(比如使用$app->add(JwtMiddleware::class);的默认顺序,或通过路由组单独绑定中间件)
内容的提问来源于stack exchange,提问作者nick
相关产品推荐
相关产品推荐

