今天碰到一个问题 , 就是正常跑接口 , 我们需要做一些日志 , 当出现慢日志问题进行分析与接口优化 , 于是想到了全局中间件
但是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;
}
}
