1.定义事件类
事件(Event):代表应用程序中特定的动作或状态变化,是一种信号机制。
# 创建事件类 app/event下文件
php artisan make:event ActivityPackageEvent
<?php
namespace App\Events;
class ActivityPackageEvent
{
public function __construct( $args)
{
$this->activity = $args[0];
$this->order = $args[1];
$this->package = $args[2];
}
}
2.定义监听类
监听器(Listener):负责处理事件的代码逻辑单元。当特定事件被触发时,与之关联的监听器会执行相应的操作。
# 创建监听器类并关联到指定事件
php artisan make:listener ActivityPackageListener --event=ActivityPackageEvent
<?php
use Illuminate\Contracts\Queue\ShouldQueue;
class ActivityPackageListener implements ShouldQueue
{
public function handle($event)
{
\Log::error('异步操作');
$package = $event->package;
$order = $event->order;
$activity = $event->activity;
//逻辑处理
}
}
3.注册时间和监听器
<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider
{
protected $listen = [
'Modules\Activity\Events\ActivityPackageEvent' => [
'Modules\Activity\Listeners\ActivityPackageListener',
],
];
public function boot()
{
parent::boot();
}
}
4. 触发事件
在应用程序的任意位置,你都可以使用 event
辅助函数来触发事件
event(new \Modules\Activity\Events\ActivityPackageEvent([$activity, $order, $package]));
不继承 ShouldQueue
接口:同步执行
继承 ShouldQueue
接口:异步执行。将任务推送至队列执行。
php artisan queue:work