Laravel事件 - 失败,类没有方法

时间:2018-01-12 18:50:08

标签: php laravel queue listener

使用Laravel 5.5,我有一个名为JobEventSubscriber的侦听器正在使用数据库队列。它有一个名为uploadFileToPartner的方法,只要触发JobFilesUploaded事件就会触发该方法。

以下是我订阅方法的代码:

public function subscribe($events){
    $events->listen(JobSaved::class, JobEventSubscriber::class . '@syncToCrm');
    $events->listen(JobFilesUploaded::class, JobEventSubscriber::class . '@uploadFileToPartner');
}

每当这些事件中的任何一个触发时,数据库监听器都会失败,并显示以下错误:

ErrorException: call_user_func_array() expects parameter 1 to be a valid callback, 
class 'App\Listeners\JobEventSubscriber' does not have a method 'uploadFileToPartner' 
in /var/www/html/vendor/laravel/framework/src/Illuminate/Events/CallQueuedListener.php:79

当我将queue_driver更改为sync时,它有效。我也进了Tinker并打字:

>>> use App\Listeners\JobEventSubscriber
>>> $eventSubscriber = app(JobEventSubscriber::class);
    => App\Listeners\JobEventSubscriber {#879
      +connection: "database",
    }
>>> method_exists($eventSubscriber, 'uploadFileToPartner');
    => true

这里有什么错误,它找不到绝对存在的方法。

可能有必要提一下,我最近从Larvel 5.4更新了这个应用程序。

1 个答案:

答案 0 :(得分:0)

在阅读the docs后,它说如果您更改了代码,则需要重新启动队列流程。

具体说:

  

请记住,队列工作程序是长期存在的进程,并将引导的应用程序状态存储在内存中。因此,他们在启动后不会注意到代码库中的更改。因此,在部署过程中,请务必重新启动队列工作程序。

我更改了方法的名称,然后我没有重新启动队列。因此队列正在接收具有新名称的事件,但它正在执行旧代码。因此,方法名称无法识别。