使用以下代码,如何将on_stats函数放在一个区域中?因此,可以在此页面上的所有函数中共享和调用它,而不是一遍又一遍地复制和粘贴相同的代码。另外,我如何一次性声明$ logger而不是一遍又一遍。
class API extends Controller
{
public function __construct() {
}
public function api_call1() {
$client = new GuzzleHttp\Client(['defaults' => ['verify' => false]]);
$logger = new Logger('View Logs');
$logger->pushHandler(new StreamHandler(storage_path() . '/logs/api_log.log', Logger::INFO));
$res = $client->get($this->url . "/my/url/", [
'on_stats' => function (TransferStats $stats) use ($logger) {
$logger->info('Request' . $stats->getRequest()->getMethod() .
'Response' . $stats->getResponse()->getStatusCode() .
'Tx Time' . $stats->getTransferTime()
);
}
]);
$response = Response::make($res->getBody(), 200);
$response->header('Content-Type', 'application/json');
return $response;
}
public function api_call2() {
$client = new GuzzleHttp\Client(['defaults' => ['verify' => false]]);
$logger = new Logger('View Logs');
$logger->pushHandler(new StreamHandler(storage_path() . '/logs/api_log.log', Logger::INFO));
$res = $client->get($this->url . "/my/url2/", [
'on_stats' => function (TransferStats $stats) use ($logger) {
$logger->info('Request' . $stats->getRequest()->getMethod() .
'Response' . $stats->getResponse()->getStatusCode() .
'Tx Time' . $stats->getTransferTime()
);
}
]);
$response = Response::make($res->getBody(), 200);
$response->header('Content-Type', 'application/json');
return $response;
}
}
答案 0 :(得分:0)
从我的观点来看,这是一个好主意:
将类属性声明为$ logger
将记录器初始化移至构造函数
将“on_stats”方法重写为类方法,比如logEvent(TransferStats $stats)
使用$ this-> logger,这样就可以避免使用“use
”关键字
将客户端事件“on_stats
”作为标准PHP可调用数组传递:
['on_stats'=> [$ this,'logEvent']]