mcpField
S
symfony:doctrine-events

symfony:doctrine-events

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

关于 symfony:doctrine-events

面向 Symfony 的 Doctrine 持久化事件开发技能,涵盖事件机制选择及向 ORM 3 迁移订阅器。它提供实现约束,并要求使用真实数据库进行定向功能测试。

主要功能

  1. 01选择回调、实体监听器或生命周期监听器
  2. 02通过属性配置监听器
  3. 03使用事件专属参数类型
  4. 04ORM 3 订阅器迁移指导
  5. 05事件处理器约束

适用场景

  1. 01持久化时添加时间戳或 slug
  2. 02持久化时触发索引或通知
  3. 03将 Doctrine 订阅器迁移到 ORM 3
  4. 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、搜索索引、通知)。
  • 将 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
  • docs/complexity-tiers.md

评论

支持 Markdown