Hyperf 中如何从请求中获取对应的控制器名称以及方法名称,或者请求对应的路由信息
我们能够中请求对象中获取到请求对应的控制器名称以及方法名称,对应的路由信息也是包含在请求中,具体的代码如下:
获取请求中的控制器以及方法名称
$request = ApplicationContext::getContainer()
->get(\Hyperf\HttpServer\Contract\RequestInterface::class);
$dispatched = $request->getAttribute(\Hyperf\HttpServer\Router\Dispatched::class);
$callback = $dispatched->handler->callback;
list($class, $method) = explode('@', $callback);
//最终获取到的 $class 就是请求对应的类名、$method 就是请求对应的方法名称
获取请求中的路由名称
Hyperf 中没有类似 Laravel 中的给路由起名字的功能,所以没有直接提供获取路由名称的方法,需要我们自己改造,具体可以搜索下对应的 Composer 包
$request = ApplicationContext::getContainer()->get(\Hyperf\HttpServer\Contract\RequestInterface::class);
$dispatched = $request->getAttribute(\Hyperf\HttpServer\Router\Dispatched::class);
$route = $dispatched->handler->route;
//最终获取到的 $route 就是请求对应的路由