Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在中间件中添加日志头_Php_Http_Guzzle - Fatal编程技术网

Php 在中间件中添加日志头

Php 在中间件中添加日志头,php,http,guzzle,Php,Http,Guzzle,我有一个GuzzleClientLoggingHandler,如下所示: class GuzzleClientLoggingHandler { /** @var HandlerStack */ private $handlerStack; public function __construct(HandlerStack $handlerStack) { $this->handlerStack = $handlerStack; }

我有一个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);
    };
}
还有一个问题:如何用更改/设置的头记录这个请求?
现在,中间件中的所有请求修改都不会出现在日志中。

您需要更改堆栈中中间件的顺序。看一看,关于如何将中间件应用于请求和响应(注意顺序!),有一个很好的解释

因此,要记录应用了所有修改的请求,您需要使用
->push()
而不是
->unshift()
将中间件放在堆栈的末尾