Условная подписка на слушателя в Laravel

Я настроил прослушиватель, добавив его в EventServiceProvider

protected $subscribe = [
  MyListener::class
];

Слушатель (MyListener) имеет функцию subscribe, которая подписывается на события, которые слушатель хочет прослушивать, и она работает нормально.


Теперь я пытаюсь добавить проверку, чтобы ограничить, какие события следует прослушивать. Что-то типа

public function subscribe($events)
{
    $config = ConfigService::getUserConfig();

    if ($config->shouldSubscribe) {
       $events->listen(.....);
    }
}

Однако у меня возникли некоторые проблемы после добавления этой логики.

Кажется, что при запуске composer install он выполняет метод подписки.

Это вызывает проблему, потому что при запуске composer install нет активного сеанса - поэтому я встречаюсь с ошибкой SQL - он не может найти, в какой базе данных искать конфигурацию - за которой следует эта ошибка

Скрипт @php artisan package: узнайте об обработке события post-autoload-dump, возвращенного с кодом ошибки 1.

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


person Daniel    schedule 03.08.2019    source источник


Ответы (1)


Это не точный ответ на ваш ответ, но он должен работать в вашем случае. Вы можете определить, выполняется ли ваш код из консоли, используя функцию Application::runningInConsole().

Пример:

public function subscribe($events)
{
    // Running from cli script, abort ship!
    if(app()->runningInConsole())
    {
        return;
    }

    $config = ConfigService::getUserConfig();

    if ($config->shouldSubscribe) {
       $events->listen(.....);
    }
}
person Neproify    schedule 03.08.2019
comment
Очень хорошая идея, но запускInConsole также блокирует обычные команды ремесленника, на которые я все равно хотел бы подписаться. Интересно, есть ли способ блокировать только композиторские вещи - person Daniel; 04.08.2019
comment
Не могли бы вы прислать мне вывод этого кода при запуске установки композитора? var_dump($argv); Первым элементом должно быть имя скрипта. Если я правильно думаю, это должен быть композитор. - person Neproify; 04.08.2019