返回

Laravel 中的事件监听:给用户发消息,扩大用户体验

见解分享

在 Laravel 中,事件监听功能非常简单易用。我们首先需要创建一个事件类,该类负责定义事件的名称和参数。然后,我们需要创建一个事件监听器类,该类负责监听事件并执行相应的操作。

下面是一个具体的例子,演示如何在 Laravel 中使用事件监听功能来实现订单发货后自动发送消息通知给用户:

  1. 创建事件类
namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class OrderShipped implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $order;

    public function __construct(Order $order)
    {
        $this->order = $order;
    }

    public function broadcastOn()
    {
        return new PresenceChannel('order-shipped');
    }
}
  1. 创建事件监听器类
namespace App\Listeners;

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

class SendOrderShippedNotification implements ShouldQueue
{
    use InteractsWithQueue;

    public function handle(OrderShipped $event)
    {
        $order = $event->order;

        // 发送消息通知给用户
    }
}
  1. EventServiceProvider 类中注册事件监听器
namespace App\Providers;

use App\Events\OrderShipped;
use App\Listeners\SendOrderShippedNotification;
use Illuminate\Auth\Events\Registered;
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
use Illuminate\Foundation\Support\Providers\EventServiceProvider;

class EventServiceProvider extends EventServiceProvider
{
    protected $listen = [
        Registered::class => [
            SendEmailVerificationNotification::class,
        ],
        OrderShipped::class => [
            SendOrderShippedNotification::class,
        ],
    ];
}
  1. 在控制器中触发事件
namespace App\Http\Controllers;

use App\Events\OrderShipped;
use App\Order;
use Illuminate\Http\Request;

class OrderController extends Controller
{
    public function shipOrder(Request $request, Order $order)
    {
        // 将订单标记为已发货
        $order->shipped = true;
        $order->save();

        // 触发事件
        event(new OrderShipped($order));
    }
}
  1. 在前端使用 JavaScript 监听事件
Echo.channel('order-shipped')
    .listen('OrderShipped', (e) => {
        // 在这里处理事件
    });

通过以上步骤,我们就可以在 Laravel 中使用事件监听功能来实现订单发货后自动发送消息通知给用户了。