我在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');
}
}
EventServiceProvider:
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
如果此代码可在另一台计算机上运行,我还能做些什么来使其在我的计算机上运行?
其他信息:
答案 0 :(得分:1)
首先,尝试应用chmod -R 777 storage/logs
可能只是一个授权问题。
也许事件注册失败,您可以尝试将其添加到EventServiceProvider
/**
* Determine if events and listeners should be automatically discovered.
*
* @return bool
*/
public function shouldDiscoverEvents()
{
return true;
}
您的第二台工作机器与第一台机器相同吗?
答案 1 :(得分:1)
好的。我通过手动创建类在Laravel 5.8中测试了您的设置,并正确记录了事件和侦听器。
我建议您避免手动创建事件和侦听器类。相反,您首先需要在EventServiceProvider.php
中指定它们:
protected $listen = [
'App\Events\Consensus\ManualGroupChannelNotificationEvent' => [
'App\Listeners\Consensus\ManualGroupChannelNotificationListener',
],
];
然后使用此工匠命令自动生成必要的类文件
php artisan event:generate
您现在可以通过包含use Illuminate\Support\Facades\Log;
指令行来修改生成的类,然后在事件构造函数和侦听器处理程序方法中使用Log::debug()
方法调用。
尝试此建议的方法,看看是否可行。我认为这不是存储访问权限的情况,因为该事件成功记录了您的情况。
答案 2 :(得分:1)
我删除了存储库并再次克隆,现在可以正常工作了。