为啥我的事件监听器没有在 laravel 5 中触发?

Posted

技术标签:

【中文标题】为啥我的事件监听器没有在 laravel 5 中触发?【英文标题】:Why is my event listener not firing in laravel 5?为什么我的事件监听器没有在 laravel 5 中触发? 【发布时间】:2016-04-02 04:46:49 【问题描述】:

因此,当在我正在处理的 laravel 5 应用程序中创建新订单时,我试图记录一些简单的事情。

所以我有一个OrderWasCreated 事件,看起来像这样:

<?php

namespace App\Events;

use App\Events\Event;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

use App\Order;

class OrderWasCreated extends Event

    use SerializesModels;

    public $order;

    /**
     * OrderWasCreated constructor.
     */
    public function __construct(Order $order)
    
        $this->order = $order;
    


    /**
     * Get the channels the event should be broadcast on.
     *
     * @return array
     */
    public function broadcastOn()
    
        return [];
    

然后我有OrderEventListener,看起来像这样:

<?php

namespace App\Listeners;

use App\Events\OrderWasCreated;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

class OrderEventListener

    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    
        //
    

    public function subscribe(Dispatcher $events)
    
        $events->listen(
            'App\Events\OrderWasCreated',
            'App\Listeners\OrderEventListener@onOrderWasCreated'
        );
    

    /**
     * Handle the event.
     *
     * @param  OrderWasCreated  $event
     * @return void
     */
    public function onOrderWasCreated(OrderWasCreated $event)
    
        \Log::info('Order was created event fired');
    

在我的 OrderController 中,我的 store 方法中有这个:

    event(new OrderWasCreated($order));

然而,当我创建新订单时,我的日志文件中看不到任何内容。我错过了什么?

【问题讨论】:

您必须向laravel.com/docs/5.1/events#registering-events-and-listeners 之类的侦听器注册您的事件,您是否为您的事件添加了侦听器? 【参考方案1】:

可能您还没有将OrderEventListener 添加到EventServiceProvidersubscribe 属性中,它应该如下所示:

protected $subscribe = [
   'App\Listeners\OrderEventListener',
];

如果您添加了,请运行 php artisan clear-compiled 以确保您的应用使用当前版本的类。

【讨论】:

我想知道我是否在某处遗漏了一些小东西。谢谢。 php artisan clear-compiled 和 php artisan queue:restart 非常重要。容易忘记的命令。 @SinanGül 你拯救了一天!哪里都没有提到这个!

以上是关于为啥我的事件监听器没有在 laravel 5 中触发?的主要内容,如果未能解决你的问题,请参考以下文章

会话过期的 laravel 事件监听器,因为会话过期时没有调用注销事件监听器

Laravel 5.2:如何从自己的事件监听器访问请求和会话类?

Laravel 5.2:如何从自己的事件监听器访问请求和会话类?

实现队列时,Laravel通知侦听器无用

在事件监听器中同步多对多关系(Laravel 5.7)

为啥没有为 primefaces SelectManyCheckbox 调用事件侦听器?