mcpField
D
doctrine-events

doctrine-events

github.com/dev-toolings开发22784 次安装3 周前更新
代码仓库

关于 doctrine-events

doctrine-events 是用于 Symfony 的开发技能,涵盖实体持久化副作用和 Doctrine 事件设计,也包括 ORM 3 订阅器迁移。它说明如何选择并配置回调或监听器,并通过真实数据库上的功能测试验证行为。

主要功能

  1. 01选择回调或监听器类型
  2. 02使用属性配置监听器
  3. 03按事件使用对应参数类
  4. 04通过真实数据库测试副作用
  5. 05遵循 ORM 3 迁移注意事项

适用场景

  1. 01添加持久化时的时间戳或 slug
  2. 02通过事件触发搜索索引或通知
  3. 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、搜索索引、通知)。
  • 将 EventSubscriberInterface Doctrine 订阅器迁移到 ORM 3。
  • 在生命周期回调、实体监听器和全局生命周期监听器之间进行选择。

默认工作流

  1. 选择范围最窄的机制:回调(单个实体,无依赖)→ 实体监听器(单个实体,需要服务)→ 生命周期监听器(横切关注点,适用于所有实体)。
  2. 使用属性进行配置(#[ORM\HasLifecycleCallbacks]、#[AsEntityListener]、#[AsDoctrineListener])。
  3. 根据事件类型为事件参数指定类型(PostPersistEventArgs、PreUpdateEventArgs,等等)。
  4. 使用针对真实数据库的定向功能测试,验证副作用是否触发。

防护措施

  • ORM 3.0 移除了 EventSubscriberInterface Doctrine 订阅器——切勿重新引入。
  • 在全局生命周期监听器中尽早检查实体类型(该监听器会对每个实体触发)。
  • 切勿在 Doctrine 事件处理器中调用 flush()——这会破坏正在执行的工作单元。
  • preUpdate 受到限制:只能通过 $args->setNewValue() 修改字段,切勿触碰关联。

渐进式披露

  • 使用此文件了解执行方式和风险控制。
  • 打开 reference.md,了解三种机制、事件参数对照表以及从订阅器迁移的方法。

输出约定

  • 监听器/回调类及其正确的属性。
  • 选择该机制的理由。
  • 验证结果(测试确认副作用已触发)。

参考

  • reference.md

评论

支持 Markdown