返回
Laravel 中的事件监听:给用户发消息,扩大用户体验
见解分享
2024-01-04 12:32:31
在 Laravel 中,事件监听功能非常简单易用。我们首先需要创建一个事件类,该类负责定义事件的名称和参数。然后,我们需要创建一个事件监听器类,该类负责监听事件并执行相应的操作。
下面是一个具体的例子,演示如何在 Laravel 中使用事件监听功能来实现订单发货后自动发送消息通知给用户:
- 创建事件类
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');
}
}
- 创建事件监听器类
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;
// 发送消息通知给用户
}
}
- 在
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,
],
];
}
- 在控制器中触发事件
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));
}
}
- 在前端使用 JavaScript 监听事件
Echo.channel('order-shipped')
.listen('OrderShipped', (e) => {
// 在这里处理事件
});
通过以上步骤,我们就可以在 Laravel 中使用事件监听功能来实现订单发货后自动发送消息通知给用户了。