【问题标题】:Conditional subscription to listener in Laravel有条件订阅 Laravel 中的侦听器
【发布时间】:2019-12-11 23:36:24
【问题描述】:

我已经在EventServiceProvider中添加了一个监听器

protected $subscribe = [
  MyListener::class
];

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


现在,我正在尝试添加一个检查来限制应该监听哪些事件。类似的东西

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

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

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

似乎在运行composer install时会执行订阅方法。

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

Script @php artisan package:discover 处理返回的自动加载转储后事件,错误代码为 1

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

【问题讨论】:

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


    【解决方案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(.....);
        }
    }
    

    【讨论】:

    • 非常好的主意,但是 runningInConsole 也会阻止常规的工匠命令,我仍然希望它们订阅。我想知道是否有办法只阻止“作曲家”的东西
    • 在运行 composer install 时你能把这段代码的输出发给我吗? var_dump($argv); 第一个元素应该是脚本的名称。如果我认为正确的话应该是作曲家。
    猜你喜欢
    • 2018-12-12
    • 2020-12-18
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 2019-07-14
    • 2016-04-12
    • 1970-01-01
    相关资源
    最近更新 更多