我在 Github API 项目中使用 Laravel。
我想设置一个已预先配置的通用 Guzzle 客户端实例。我需要这个,因为我的 Guzzle 请求中大约 90% 都需要一个 access_token header 和一个 base_uri。
// Return a new configured guzzle client.
return new Client([
'base_uri' => 'https://api.github.com',
'headers' => [
'Authorization' => "token {$access_token}"
]
]);
我知道我可以将它绑定(bind)到我目前正在做的容器中,就像在自定义中间件中一样:
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 客户端。这工作正常,但我遇到的问题是我无法在 Controller 中执行以下操作:
public function __construct(Container $container)
{
$guzzle = $container->make(Client::class);
}
如果我使用上面的方法,我只会获得 Guzzle 的默认实现,而不是我的预配置实例。我猜这是因为 Controller 的构造函数在中间件之前运行并且它只是尚未设置。
不过,我仍然想将该属性共享给 Controller 中的其他方法。我该如何解决这个问题?
最佳答案
我会为 api 交互创建一个新类。在构造函数中,启动您的 guzzle 对象,然后为使用该 guzzle 对象的各种 api 调用创建方法。
关于php - Laravel 在哪里存储配置的实例逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41400791/