有条件地订阅Laravel中的侦听器

时间:2019-08-03 20:10:07

标签: php laravel laravel-5.8 service-provider laravel-events

我已经通过将其添加到EventServiceProvider

中来建立了一个侦听器
protected $subscribe = [
  MyListener::class
];

侦听器(MyListener)具有subscribe函数,用于订阅侦听器要侦听的事件-它可以正常运行


现在,我正在尝试添加检查以限制应监听的事件。像

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

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

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

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

这会导致问题,因为在运行composer install时没有活动的会话-我遇到了SQL错误-无法找到要在其中搜索配置的数据库-随后出现此错误< / p>

  

脚本@php artisan软件包:发现处理错误代码为1的返回的autoload-dump事件

如何在监听器中有条件地订阅某些事件?

1 个答案:

答案 0 :(得分: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(.....);
    }
}