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
posted @ 2022-05-08 23:13  pine007  阅读(766)  评论(0编辑  收藏  举报