You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 01:10:57