Laravel EventListener不会触发

时间:2019-10-01 14:52:38

标签: php laravel

我在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

如果此代码可在另一台计算机上运行,​​我还能做些什么来使其在我的计算机上运行?

其他信息:

  • 我的日志记录确实有效;事件消息已记录。
  • 其他类似事件确实起作用。

3 个答案:

答案 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)

我删除了存储库并再次克隆,现在可以正常工作了。