Laravel 在哪里存储配置的实例逻辑?
Laravel where to store configured instance logic?
我正在使用 Laravel 进行 Github API 项目。
我想设置一个已经 pre-configured 的通用 Guzzle 客户端实例。我需要这个,因为我的 Guzzle 请求中有大约 90% 的请求,Guzzle 客户端将需要一个 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}"
]
]);
我知道我可以将它绑定到我目前正在做的容器中,就像在自定义中间件中一样:
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}"
]
]);
});
}
我只是用我的 pre-configured 具体实例覆盖了默认的 Guzzle 客户端。这工作正常,但我 运行 遇到的问题是我无法在控制器中执行以下操作:
public function __construct(Container $container)
{
$guzzle = $container->make(Client::class);
}
如果我使用上面的方法,我只会得到 Guzzle 的默认实现,而不是我的 pre-configured 实例。我猜这是因为控制器的构造函数在中间件之前运行并且它只是尚未设置。
我仍然想与控制器中的其他方法共享 属性。我该如何解决这个问题?
我会为 api 互动创建一个新的 class。在构造函数中,启动您的 guzzle 对象,然后为使用该 guzzle 对象的各种 api 调用创建方法。
我正在使用 Laravel 进行 Github API 项目。
我想设置一个已经 pre-configured 的通用 Guzzle 客户端实例。我需要这个,因为我的 Guzzle 请求中有大约 90% 的请求,Guzzle 客户端将需要一个 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}"
]
]);
我知道我可以将它绑定到我目前正在做的容器中,就像在自定义中间件中一样:
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}"
]
]);
});
}
我只是用我的 pre-configured 具体实例覆盖了默认的 Guzzle 客户端。这工作正常,但我 运行 遇到的问题是我无法在控制器中执行以下操作:
public function __construct(Container $container)
{
$guzzle = $container->make(Client::class);
}
如果我使用上面的方法,我只会得到 Guzzle 的默认实现,而不是我的 pre-configured 实例。我猜这是因为控制器的构造函数在中间件之前运行并且它只是尚未设置。
我仍然想与控制器中的其他方法共享 属性。我该如何解决这个问题?
我会为 api 互动创建一个新的 class。在构造函数中,启动您的 guzzle 对象,然后为使用该 guzzle 对象的各种 api 调用创建方法。