我有一个如下的GuzzleClientLoggingHandler:
class GuzzleClientLoggingHandler
{
/** @var HandlerStack */
private $handlerStack;
public function __construct(HandlerStack $handlerStack)
{
$this->handlerStack = $handlerStack;
}
public function log(): HandlerStack
{
$logger = Logger::getLogger(__CLASS__);
$middleware = Middleware::log($logger, $this->request());
$this->handlerStack->unshift($middleware);
$middleware = Middleware::log($logger, $this->response());
$this->handlerStack->unshift($middleware);
return $this->handlerStack;
}
}我的客户看起来是这样的:
new Client([
'base_uri' => 'https://example.com',
'handler' => (new GuzzleClientLoggingHandler($handlerStack))->log()
]);和可变$handlerStack具有n个中间件,例如:
$handlerStack->unshift(new LanguageMiddleware());在中间件LanguageMiddleware中,我为每个请求设置了一个头
public function __invoke(callable $handler)
{
return function (RequestInterface $request, array $options) use ($handler) {
$request = modify_request($request, [
'set_headers' => [
'Accept-Language' => Session::get('language')
]
]);
return $handler($request, $options);
};
}还有一个问题:如何使用已更改/已设置的头记录此请求?现在,中间件中的所有请求修改都不会出现在日志中。
发布于 2019-09-07 06:38:29
您需要更改堆栈中中间件的顺序。看看the docs,关于中间件如何应用于请求和响应有一个很好的解释(注意顺序!)。
因此,要记录应用了所有修改的请求,您需要使用->push()而不是->unshift()将中间件放在堆栈的末尾。
https://stackoverflow.com/questions/57772411
复制相似问题