Laravel 在 View Composer 中通过 HTTP 从外部资源获取的共享数据

Laravel shared data from external resource fetched by HTTP in view composer

我想共享从外部 API 获取的所有 blade 的全局数据。出于这个原因,我创建了一个 ViewServiceProvider,它按如下方式启动
View::composer('*', CommonsComposer::class);

比起在 composer 中,我更愿意按如下方式获取数据

public function __construct()
{
    try {
        $response = Http::get(env('WP_API_URL') . 'bdb/v1/options');
        $this->wpData = $response->json();
    } catch (HttpException $exception) {
        dump($exception);
    }
}

但这里不是执行此操作的最佳位置,因为当呈现 blade 模板时,调用也会被触发。

如何将 HTTP 调用限制为一个请求?

我们认为您可以使用单例模式注册作曲家 class。像这样:

ViewServiceProvider中:

public function register()
{
    $this->app->singleton(\path_to_composer\CommonsComposer::class);
}