事件开发文档
ECShopX 采用 Laravel/Lumen Event + Listener 模式,按 Bundle 分域注册。事件注册入口:bootstrap/app.php 中各 Bundle 的 EventServiceProvider。
1. 关键路径
| 路径 | 说明 |
|---|---|
src/{Bundle}/Events/*.php | 事件定义 |
src/{Bundle}/Listeners/*.php | 监听器实现 |
src/{Bundle}/Providers/EventServiceProvider.php | $listen 映射 |
src/EspierBundle/Listeners/BaseListeners.php | Listener 基类 |
2. 已注册 EventServiceProvider 的 Bundle
(见 bootstrap/app.php)
| Bundle | 典型事件域 |
|---|---|
| OrdersBundle | 订单支付、取消、流程日志 |
| MembersBundle | 会员注册成功 |
| GoodsBundle | 商品创建、编辑、库存 |
| DistributionBundle | 店铺创建 |
| ThirdPartyBundle | 交易同步、退款 |
| SystemLinkBundle | ERP 链路 |
| WechatBundle | 微信相关 |
| ReservationBundle | 预约完成 |
| CompanysBundle | 企业/操作员 |
| OpenapiBundle | 开放 API |
| EspierBundle | 平台级 |
| HfPayBundle | 汇付分账 |
| YoushuBundle | 有数统计 |
3. 核心事件示例
订单域(OrdersBundle)
| Event | 触发时机 | 典型 Listener |
|---|---|---|
TradeFinishEvent | 支付完成 | 统计、分润、短信、ERP、发票、企微等 |
NormalOrderAddEvent | 创单 | 供应商拆单 |
NormalOrderCancelEvent | 取消 | 名额释放、库存回滚等 |
OrderProcessLogEvent | 流程节点 | 流程日志 |
会员域(MembersBundle)
| Event | 说明 |
|---|---|
CreateMemberSuccessEvent | 注册成功 → 促销、积分、通知 |
商品域(GoodsBundle)
| Event | 说明 |
|---|---|
ItemCreateEvent | 新建商品 |
ItemEditEvent | 编辑商品、同步分销店 |
4. 新增与注册步骤
4.1 定义 Event
src/{YourBundle}/Events/YourEvent.phpphp
namespace YourBundle\Events;
class YourEvent
{
public function __construct(public array $payload) {}
}4.2 实现 Listener
src/{YourBundle}/Listeners/YourListener.php可继承 EspierBundle\Listeners\BaseListeners。
php
namespace YourBundle\Listeners;
class YourListener
{
public function handle(YourEvent $event): void
{
// 业务逻辑
}
}4.3 注册映射
在 src/{YourBundle}/Providers/EventServiceProvider.php:
php
protected $listen = [
\YourBundle\Events\YourEvent::class => [
\YourBundle\Listeners\YourListener::class,
],
];4.4 注册 Provider
在 bootstrap/app.php 中确保:
php
$app->register(YourBundle\Providers\EventServiceProvider::class);4.5 派发事件
php
event(new \YourBundle\Events\YourEvent($data));
// 或
\Event::dispatch(new \YourBundle\Events\YourEvent($data));5. 参考范例(订单支付完成)
| 项 | 路径 |
|---|---|
| Event | src/OrdersBundle/Events/TradeFinishEvent.php |
| Listener | src/OrdersBundle/Listeners/TradeFinishSmsNotify.php |
| 注册 | src/OrdersBundle/Providers/EventServiceProvider.php |
| 派发 | TradeService / 支付回调逻辑中 event(new TradeFinishEvent(...)) |
6. 注意事项
- Listener 内避免长阻塞;重逻辑应
dispatch(new XxxJob(...))入队。 - 跨 Bundle 监听:在目标 Bundle 的 EventServiceProvider 中注册即可。
- 新增 Bundle 时勿忘记注册 EventServiceProvider。
