关于 symfony:doctrine-events
面向 Symfony 的 Doctrine 持久化事件开发技能,涵盖事件机制选择及向 ORM 3 迁移订阅器。它提供实现约束,并要求使用真实数据库进行定向功能测试。
主要功能
- 01选择回调、实体监听器或生命周期监听器
- 02通过属性配置监听器
- 03使用事件专属参数类型
- 04ORM 3 订阅器迁移指导
- 05事件处理器约束
适用场景
- 01持久化时添加时间戳或 slug
- 02持久化时触发索引或通知
- 03将 Doctrine 订阅器迁移到 ORM 3
- 04用真实数据库测试事件副作用
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dev-toolings/ superpowers-symfony --skill symfony:doctrine-events安装后在 Claude Code 中输入/symfony: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.mddocs/complexity-tiers.md
评论
支持 Markdown