我正在使用laravel进行github api项目。
我想设置一个已预配置的通用Guzzle Client实例。我需要这个,因为大约有90%的Guzzle请求,Guzzle Client将需要一个Access_Token标题和一个base_uri。
// Return a new configured guzzle client.
return new Client([
'base_uri' => 'https://api.github.com',
'headers' => [
'Authorization' => "token {$access_token}"
]
]);
我知道我可以在当前正在执行的容器中绑定它,以便在自定义中间件中:
if (Auth::check()) {
$this->app->singleton(Client::class, function() {
// Grab the current user.
$user = Auth::user();
$access_token = decrypt($user->access_token);
// Return a new configured Guzzle instance.
return new Client([
'base_uri' => 'https://api.github.com',
'headers' => [
'Authorization' => "token {$access_token}"
]
]);
});
}
我只是用我的预配合的具体实例覆盖默认的guzzle客户端。这很好,但是我遇到的问题是我无法在控制器中进行以下操作:
public function __construct(Container $container)
{
$guzzle = $container->make(Client::class);
}
如果我使用上述内容,我将仅获得Guzzle的默认实现,而不是我的预配置实例。我猜这是因为控制器的构造函数在中间件之前运行,并且还没有设置。
我仍然想将属性共享到控制器中的其他方法。我该如何解决?
我将为API交互创建一个新类。在构造函数中,启动您的Guzzle对象,然后为使用该Guzzle对象的各种API调用创建方法。