使用以下代码,我如何将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;
}
}
从我的观点来看,这将是一个好主意:
-
声明一个类属性为$logger
-
将记录器初始化移动到构造函数
-
将"on_stats"方法重写为一个类方法,使用$this->logger写入
logEvent(TransferStats $stats)
,这样你就可以避免使用"use
"关键字 -
传递客户端事件"
on_stats
"作为一个标准的PHP可调用数组:['on_stats' => [$this, 'logEvent']]