关于 doctrine-events
doctrine-events 是用于 Symfony 的开发技能,涵盖实体持久化副作用和 Doctrine 事件设计,也包括 ORM 3 订阅器迁移。它说明如何选择并配置回调或监听器,并通过真实数据库上的功能测试验证行为。
主要功能
- 01选择回调或监听器类型
- 02使用属性配置监听器
- 03按事件使用对应参数类
- 04通过真实数据库测试副作用
- 05遵循 ORM 3 迁移注意事项
适用场景
- 01添加持久化时的时间戳或 slug
- 02通过事件触发搜索索引或通知
- 03迁移 ORM 3 的 Doctrine 订阅器
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dev-toolings/ superpowers-symfony --skill doctrine-events安装后在 Claude Code 中输入/doctrine-events确认已加载。
附带文件reference.md
详细介绍
Doctrine 事件(Symfony)
适用场景
- 需要在实体持久化时执行副作用(时间戳、slug、搜索索引、通知)。
- 将
EventSubscriberInterfaceDoctrine 订阅器迁移到 ORM 3。 - 在生命周期回调、实体监听器和全局生命周期监听器之间进行选择。
默认工作流
- 选择范围最窄的机制:回调(单个实体,无依赖)→ 实体监听器(单个实体,需要服务)→ 生命周期监听器(横切关注点,适用于所有实体)。
- 使用属性进行配置(
#[ORM\HasLifecycleCallbacks]、#[AsEntityListener]、#[AsDoctrineListener])。 - 根据事件类型为事件参数指定类型(
PostPersistEventArgs、PreUpdateEventArgs,等等)。 - 使用针对真实数据库的定向功能测试,验证副作用是否触发。
防护措施
- ORM 3.0 移除了
EventSubscriberInterfaceDoctrine 订阅器——切勿重新引入。 - 在全局生命周期监听器中尽早检查实体类型(该监听器会对每个实体触发)。
- 切勿在 Doctrine 事件处理器中调用
flush()——这会破坏正在执行的工作单元。 preUpdate受到限制:只能通过$args->setNewValue()修改字段,切勿触碰关联。
渐进式披露
- 使用此文件了解执行方式和风险控制。
- 打开
reference.md,了解三种机制、事件参数对照表以及从订阅器迁移的方法。
输出约定
- 监听器/回调类及其正确的属性。
- 选择该机制的理由。
- 验证结果(测试确认副作用已触发)。
参考
reference.md
评论
支持 Markdown