Hyperf 中如何从请求中获取对应的控制器名称以及方法名称,或者请求对应的路由信息

我们能够中请求对象中获取到请求对应的控制器名称以及方法名称,对应的路由信息也是包含在请求中,具体的代码如下:

获取请求中的控制器以及方法名称

  1. $request = ApplicationContext::getContainer()
  2. ->get(\Hyperf\HttpServer\Contract\RequestInterface::class);
  3. $dispatched = $request->getAttribute(\Hyperf\HttpServer\Router\Dispatched::class);
  4. $callback = $dispatched->handler->callback;
  5. list($class, $method) = explode('@', $callback);
  6. //最终获取到的 $class 就是请求对应的类名、$method 就是请求对应的方法名称

获取请求中的路由名称

Hyperf 中没有类似 Laravel 中的给路由起名字的功能,所以没有直接提供获取路由名称的方法,需要我们自己改造,具体可以搜索下对应的 Composer 包

  1. $request = ApplicationContext::getContainer()->get(\Hyperf\HttpServer\Contract\RequestInterface::class);
  2. $dispatched = $request->getAttribute(\Hyperf\HttpServer\Router\Dispatched::class);
  3. $route = $dispatched->handler->route;
  4. //最终获取到的 $route 就是请求对应的路由