我正在为一个Github API项目使用Laravel。
我想设置一个已经预先配置好的通用Guzzle客户端实例。我之所以需要这个,是因为对于大约90%的Guzzle请求,Guzzle客户端将需要一个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的默认实现,而不是我预先配置的实例。我猜这是因为控制器的构造函数在中间件之前运行,只是还没有设置。
不过,我仍然希望将该属性共享给控制器中的其他方法。我该怎么解决这个问题呢?
https://stackoverflow.com/questions/41400791
复制相似问题