我在Laravel中创建了一个事件和监听器,但监听器没有触发。实际上,在我的同事的机器上它确实被触发了。这让我认为实际代码是可以工作的,并且配置也没问题。
监听器:
<?php
namespace App\Listeners\Consensus;
use App\Events\Consensus\ManualGroupChannelNotificationEvent;
use Illuminate\Support\Facades\Log;
/**
* Class ManualGroupChannelNotificationListener
* @package App\Listeners\Consensus
*/
class ManualGroupChannelNotificationListener
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param ManualGroupChannelNotificationEvent $event
* @return void
*/
public function handle(ManualGroupChannelNotificationEvent $event)
{
Log::debug('Listener');
}
}
事件:
<?php
namespace App\Events\Consensus;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Support\Facades\Log;
/**
* Class ManualGroupChannelNotificationEvent
* @package App\Events\Consensus
*/
class ManualGroupChannelNotificationEvent
{
use Dispatchable;
/*
* ExternalComment constructor.
*
* @param Comment $comment
* @param User $currentUser
*/
public function __construct()
{
Log::debug('Event');
}
}
事件服务提供者:
protected $listen = [
'App\Events\Consensus\ManualGroupChannelNotificationEvent' => [
'App\Listeners\Consensus\ManualGroupChannelNotificationListener',
],
];
触发事件:
event(new ManualGroupChannelNotificationEvent());
我运行了清除缓存等所有命令,但还是不能正常工作。
php artisan clear-compiled
php artisan config:clear
php artisan cache:clear
composer dump-autoload
php artisan queue:restart
如果这段代码在其他机器上能够正常运行,那么我还需要做什么才能让它在我的机器上工作?
其他信息:
- 我的日志记录是有效的;事件消息已被记录。
- 其他类似的事件也是有效的。
class_exists('App\Listeners\Consensus\ManualGroupChannelNotificationListener')
或app()->make('App\Listeners\Consensus\ManualGroupChannelNotificationListener')
进行检查,后者是Laravel从调度程序内部实际解析侦听器的方式。如果返回false或出现错误,请检查文件名是否与类名完全匹配。我曾经遇到过这样的问题,在不区分大小写的文件系统上可以正常工作,但在区分大小写的文件系统上失败了,因为类文件的大小写有误。 - wunch