简述
事件提供了一个简单的观察者实现,允许用户订阅和侦听 Web 应用程序中触发的各种事件。Laravel 中的所有事件类都存储在app/Events文件夹和监听器存储在app/Listeners文件夹。
用于在 Web 应用程序中生成事件和侦听器的 artisan 命令如下所示 -
php artisan event:generate
如上所述,此命令生成相应文件夹的事件和侦听器。
事件和侦听器是一种解耦 Web 应用程序的好方法,因为一个事件可以有多个彼此独立的侦听器。artisan 命令创建的 events 文件夹包含以下两个文件:event.php 和 SomeEvent.php。它们显示在这里 -
Event.php
<?php
namespace App\Events;
abstract class Event{
//
}
正如刚才提到的,event.php包括类的基本定义Event并调用命名空间App\Events。请注意,用户定义或自定义事件是在此文件中创建的。
SomeEvent.php
<?php
namespace App\Events;
use App\Events\Event;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class SomeEvent extends Event{
use SerializesModels;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct() {
//
}
/**
* Get the channels the event should be broadcast on.
*
* @return array
*/
public function broadcastOn() {
return [];
}
}
请注意,该文件使用序列化来广播 Web 应用程序中的事件,并且必要的参数也在该文件中进行了初始化。
例如,如果我们需要在构造函数中初始化 order 变量来注册事件,我们可以通过以下方式完成:
public function __construct(Order $order) {
$this->order = $order;
}
听众
侦听器处理正在注册的事件中提到的所有活动。工匠命令event:generate创造了所有的listeners在里面app/listeners目录。Listeners 文件夹包含一个文件EventListener.php它具有处理侦听器所需的所有方法。
事件监听器.php
<?php
namespace App\Listeners;
use App\Events\SomeEvent;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
class EventListener{
/**
* Create the event listener.
*
* @return void
*/
public function __construct() {
//
}
/**
* Handle the event.
*
* @param SomeEvent $event
* @return void
*/
public function handle(SomeEvent $event) {
//
}
}
正如代码中提到的,它包括handle管理各种事件的功能。我们可以创建针对单个事件的各种独立侦听器。