laravel事件&监听
1、事件&监听 理解
- Laravel 的事件提供了一个简单的观察者实现,能够订阅和监听应用中发生的各种事件。事件机制是一种很好的应用解耦方式,因为一个事件可以拥有多个互不依赖的监听器。
- Laravel事件即某个动作,类似js的按钮(点击、双击、滑动)等动作,设置监听后,当事件达成条件时触发监听行为。
- 以下例子:用户下单(事件),扣减库存(监听行为)
2、生成事件
php artisan event:generate
#执行后会生成`app/Events`和`app/Listeners`目录
php artisan make:event DeductionStockEvent
#生成事件
php artisan make:listener DeductionStockListener
#生成监听
3、给事件安装监听器
app/Providers/EventServiceProvider.php
$listen属性增加事件和监听
protected $listen = [
'App\Events\Event' => [
'App\Listeners\EventListener',
],
'App\Events\DeductionStockEvent' => [
'App\Listeners\DeductionStockListener',
],
];
4、事件参数
app/Events/DeductionStockEvent.php
public $userName;
public $goodsSn;;
public $qty;
public function __construct(string $userName, string $goodsSn, int $qty)
{
$this->userName = $userName;
$this->goodsSn = $goodsSn;
$this->qty = $qty;
}
5、监听器处理业务逻辑
app\Listeners\DeductionStockListener.php
public function handle(Event $event)
{
//--处理业务逻辑
//接收事件参数
$userName = $event->userName ?? '';
$goodsSn = $event->goodsSn ?? '';
$qty = $event->qty ?? 0;
Log::info($userName.' -- '.$goodsSn.' -- '.'扣减库存' .' -- '.$qty);
}
6、调用事件触发监听行为
event(new \App\Events\DeductionStockEvent('张三','白衬衫',2));
7、结果
storage/logs/laravel.log
[2022-05-08 15:02:19] local.INFO: 张三 -- 白衬衫 -- 扣减库存 -- 2