Laravel事件系统

注册事件和监听器

Laravel 应用中的 EventServiceProvider 有个 listen 数组包含所有的事件(键)以及事件对应的监听器(值)来注册所有的事件监听器。app/Providers/EventServiceProvider.php

protected $listen = [
'App\Events\SendRegistEmail' => [
'App\Listeners\SendRegistEmailNotification',
],
];

生成事件 & 监听器

php artisan event:generate

触发事件

public function register(Request $request){
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
event(new SendRegistEmail($user));
$this->guard()->login($user);

return $this->registered($request, $user)
?: redirect($this->redirectPath());
}

事件监听器队列

如果你的监听器中要执行请求等比较慢的任务,你可以选择将其丢给队列处理。指定监听器启动队列,只需将 ShouldQueue 接口添加到监听器类。由 Artisan 命令 event:generate 生成的监听器已经将此接口导入到当前命名空间中,因此你可以直接使用它。

<?php
namespace App\Listeners;

use App\Events\SendRegistEmail;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

class SendRegistEmailNotification implements ShouldQueue
{
//use DispatchesJobs;
//任务应该发送到的队列的连接的名称
public $connection = 'redis';
// 任务应该发送到的队列的名称
public $queue = 'event-queue';
public function __construct()
{
//
}
public function handle(SendRegistEmail $event)
{
}
0%