我需要在中间件中拥有当前找到的控制器和操作,以便可以进行一些身份验证。但是我发现这是不可能的,因为管道就像Middleware1-> Middleware2->执行调度-> controller @ action()-> Middleware2-> Middleware1。
因此,在调度之前,我无法获取路线信息。在$ controller-> action()之后执行此操作绝对是不正确的。
我做了一些研究,发现了这一点。
$allRoutes = $this->app->getRoutes();
$method = \Request::getMethod();
$pathInfo = \Request::getPathInfo();
$currentRoute = $allRoutes[$method.$pathInfo]['action']['uses'];
但这在访问URI之类的方法时不起作用app/role/1
,因为$allRoutes
仅具有索引app/role/{id}
而不是app/role/1
。
有什么解决方法吗?
我找到了这个问题的正确答案。我错过了一种名为routeMiddleware()
的方法Application
。此方法注册特定于路由的中间件,该中间件在分派后调用。因此,只需使用$app->routeMiddleware()
即可注册您的中间件。并$request->route()
在您的中间件中获取匹配的路线信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句