1

我已经通过添加它来设置一个监听器EventServiceProvider

protected $subscribe = [
  MyListener::class
];

listener( MyListener) 具有subscribe订阅侦听器想要侦听的事件的函数 -它工作正常


现在,我正在尝试添加一个检查来限制应该监听哪些事件。就像是

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

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

但是,添加此逻辑后我遇到了一些问题。

似乎在运行时composer install它会执行 subscribe 方法。

这会导致一个问题,因为运行时没有活动会话composer install- 所以我遇到了一个 SQL 错误 - 它找不到要在哪个数据库中搜索配置 - 然后是这个错误

脚本 @php artisan package:discover 处理返回的 post-autoload-dump 事件,错误代码为 1

如何有条件地订阅侦听器中的某些事件?

4

1 回答 1

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(.....);
    }
}
于 2019-08-03T22:16:51.847 回答