Laravel: Pusher 的动态配置

Laravel: dynamic configuration for Pusher

我正在尝试在我的 Laravel 应用程序 (SaaS) 中动态配置 Pusher。 基本上我想为不同的帐户存储不同的 Pusher 配置。并根据用户调用相应的配置。

我尝试使用 config()->set('services.pusher.xxx', 'yyyy') 在运行时更改配置,但这在框架的任何级别都不起作用,自定义 ServiceProvider 中的事件。

我找到了 Laravel 的 BroadcastManager 并试图覆盖 createPusherDriver() 以便我可以使用用户的配置创建 PusherBroadcaster 的自定义实例,但是我我不确定该怎么做或放在哪里!

best-practice/standard 方法是什么?

我一直在自己的一个项目中使用这样的设置来设置自定义邮件配置:

NOTE: Your mileage may vary due to the order in which service providers are loaded in your app.

app\Providers\ConfigProvider.php

一样创建服务提供商
public function boot()
{
    $this->app->booted(function () {
        $shouldSetCustomConfig = true;
        // Set config values from database.
        if($shouldSetCustomConfig) {
            config([
                'mail.host' => Config::get('mail.host'),
                'mail.port' => Config::get('mail.port'),
            ]);
        }
    });
}
  • $this->app->booted() 是一个简单的回调,在应用程序启动后调用。这可能不会 总是 正常工作,因为我已经看到各种包也使用这个回调来做各种事情。在这种情况下,注册顺序很重要。请注意,不需要使用此回调。可以直接调用 config(['key' => 'newval']) 并且它可以按预期工作。
  • 上面的服务提供者应该您正在为其设置配置的提供者之前加载。在上面的示例中,它将是 Illuminate\Mail\MailServiceProvider::class。这应该确保加载了正确的配置。