为啥我的事件监听器没有在 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
添加到EventServiceProvider
的subscribe
属性中,它应该如下所示:
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:如何从自己的事件监听器访问请求和会话类?