今天碰到一个问题 , 就是正常跑接口 , 我们需要做一些日志 , 当出现慢日志问题进行分析与接口优化 , 于是想到了全局中间件
但是hyperf文档中没有写
Hyperf
根据这个官方的图示 , 可以看到这是一个洋葱模型 , 也就是说 , 肯定存在后置中间件
执行顺序: Request -> Middleware 1 -> Middleware 2 -> Middleware 3 -> Middleware 2 -> Middleware 1 -> Response
官方demo:container = $container; $this->response = $response; $this->request = $request; } public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { // 根据具体业务判断逻辑走向,这里假设用户携带的token有效 $isValidToken = true; if ($isValidToken) { return $handler->handle($request); } return $this->response->json( [ 'code' => -1, 'data' => [ 'error' => '中间件验证token无效,阻止继续向下执行', ], ] ); } }
那么 ,后置中间件怎么写呢?
忙了一会后,成功了
后置中间件container = $container; $this->response = $response; $this->request = $request; } public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { // TODO 前置中间件逻辑 $response = $handler->handle($request); // TODO 后置中间件逻辑 return $response; } }我的demo:
httpRequest->getRequestUri()); echo "请求参数:" . PHP_EOL; var_dump($this->httpRequest->all()); echo "开始时间:" . $starttime . PHP_EOL; # 请求结果 $response = $handler->handle($request); $endtime = microtime(true); echo "结束时间:" . $endtime . PHP_EOL; echo "执行时间:" . ($endtime - $starttime) . PHP_EOL; echo "________________________________________________________________________________________________". PHP_EOL; return $response; } }