事件处理(Event Handling)
优质
小牛编辑
130浏览
2023-12-01
事件提供了一个简单的观察器实现,允许用户订阅和监听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;
}
听众(Listeners)
监听器处理正在注册的事件中提到的所有活动。 artisan命令event:generate在app/listeners目录中创建所有app/listeners 。 Listeners文件夹包含一个文件EventListener.php ,它包含处理侦听器所需的所有方法。
EventListener.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功能。 我们可以创建针对单个事件的各种独立侦听器。