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

标签 php laravel oop containers laravel-5.3

我在 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/

相关文章:

c++ - 如何在基类中声明类似工厂的方法?

phpmailer 主体内的 JavaScript

php - SQL 查询总是在最后得到 '1' Laravel Eloquent

javascript - jQuery 在 Wordpress 中不工作

mysql - docker容器中出现"Base table or view not found"错误

c++ - 抽象类代码错误

java - 如何强制子类在重写方法中提供特定数据

php - 调试 PDO mySql 将 NULL 插入数据库而不是空的

php - Laravel 存储文件的公共(public) url

php - Laravel 资源路由被分配了错误的参数名称