Laravel: динамическая c конфигурация для Pusher - PullRequest
1 голос
/ 06 января 2020

Я пытаюсь настроить Pusher в моем Laravel приложении (SaaS) Dynami c. В основном я хочу хранить разные конфиги Pusher для разных аккаунтов. И вызовите соответствующий конфиг на основе пользователя.

Я пытаюсь изменить конфиг во время выполнения, используя config()->set('services.pusher.xxx', 'yyyy'), но это не работает на любом уровне платформы, событие в пользовательском ServiceProvider.

Я нашел Laravel BroadcastManager и попытался переопределить createPusherDriver(), чтобы я мог создать пользовательский экземпляр PusherBroadcaster с помощью конфигурации пользователя, но я не уверен, как это сделать или где это поставить!

Каков наилучший / стандартный способ сделать это?

1 Ответ

2 голосов
/ 06 января 2020

Я использовал настройку, подобную этой, в одном из моих собственных проектов, чтобы установить пользовательскую конфигурацию почты:

ПРИМЕЧАНИЕ. Ваш пробег может варьироваться в зависимости от порядка, в котором работают поставщики услуг. загружен в ваше приложение.

Создайте сервис-провайдер, например 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. Это должно убедиться, что загружен правильный конфиг.
...