首页 > 解决方案 > 从 Guzzle on_stats 中为对象赋值

问题描述

这里愚蠢而简短的问题,

我一直在试图让端点在我的网站上工作一段时间,其中一个动作会触发一个端点调用。我想收集有关呼叫成功和平均响应时间之类的统计信息,因此我在发出请求之前创建了一个模型,然后在达到请求 on_stats 阶段后尝试分配对象值。问题是,当我尝试从请求内部分配变量时,它无法访问该对象,从而引发Creating default object from empty value错误。Guzzle 有办法使事情同步,使用 Promise,但在出现各种错误和尝试调试后,我尝试并未能实现它们。有没有办法让我在下面的代码中尝试做的事情?如何从请求本身访问对象并分配值?

$call = new EndpointCall;
$call->endpoint_rel_id = $endpt->id;
                            
// Initiate GuzzleHTTP Client
$client = new Client();
$requestQuery = $endpt->endpoint_url;
                            
$response = $client->request('POST', $requestQuery, [
     'allow_redirects' => false,
     'json' => $obj,
     'headers' => [
           'api-secret' => $user->api_sending_secret,
           'Accept'     => 'application/json',
     ],
     'synchronous' => true,
     'http_errors' => false,
     'on_stats' => function (TransferStats $stats) {
            $call->response_time = $stats->getTransferTime();
            if ($stats->hasResponse()) {
                $call->response = $stats->getResponse()->getStatusCode();
            }
            $call->save();
     }
]);

标签: phplaravelguzzle

解决方案


尝试use($call)像这样添加到函数声明中:

$call = new EndpointCall;
$call->endpoint_rel_id = $endpt->id;
                            
// Initiate GuzzleHTTP Client
$client = new Client();
$requestQuery = $endpt->endpoint_url;
                            
$response = $client->request('POST', $requestQuery, [
     'allow_redirects' => false,
     'json' => $obj,
     'headers' => [
           'api-secret' => $user->api_sending_secret,
           'Accept'     => 'application/json',
     ],
     'synchronous' => true,
     'http_errors' => false,
     'on_stats' => function (TransferStats $stats) use($call) {
            $call->response_time = $stats->getTransferTime();
            if ($stats->hasResponse()) {
                $call->response = $stats->getResponse()->getStatusCode();
            }
            $call->save();
     }
]);

关于使用关键字

变量在函数内部是不可访问的,除非它们被声明为全局变量。以同样的方式,来自子作用域的变量不能从闭包中访问,除非使用 use 关键字明确说明。


推荐阅读