Laravel在哪里存储配置的实例逻辑



我正在使用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调用创建方法。

最新更新