mcpField
S
symfony:doctrine-events

symfony:doctrine-events

github.com/dev-toolings開発227147 回インストール4 週間前に更新
リポジトリ

symfony:doctrine-events について

Doctrine の永続化イベントを扱う Symfony 向け開発スキルです。イベント機構の選択や ORM 3 へのサブスクライバー移行を案内し、実データベースを使った対象機能テストを求めます。

主な機能

  1. 01コールバック・エンティティリスナー・ライフサイクルリスナーの選択
  2. 02属性によるリスナー設定
  3. 03イベント別の引数型の使用
  4. 04ORM 3 サブスクライバー移行の案内
  5. 05イベントハンドラーの制約

活用シーン

  1. 01永続化時にタイムスタンプや slug を追加
  2. 02永続化時にインデックス作成や通知を実行
  3. 03Doctrine サブスクライバーを 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)

使用する場面

  • エンティティの永続化に伴う副作用(タイムスタンプ、スラッグ、検索インデックス作成、通知)が必要な場合。
  • EventSubscriberInterface を実装した Doctrine サブスクライバーを ORM 3 に移行する場合。
  • ライフサイクルコールバック、エンティティリスナー、グローバルライフサイクルリスナーのどれを使うか選ぶ場合。

デフォルトのワークフロー

  1. 最も対象を絞った仕組みを選びます。コールバック(1つのエンティティ、依存関係なし)→ エンティティリスナー(1つのエンティティ、サービスが必要)→ ライフサイクルリスナー(横断的、すべてのエンティティ)。
  2. 属性(#[ORM\HasLifecycleCallbacks]、#[AsEntityListener]、#[AsDoctrineListener])を使って設定します。
  3. イベント引数には、イベントごとに定義されたクラス(PostPersistEventArgs、PreUpdateEventArgs、…)を型指定します。
  4. 実際の DB を使った対象を絞った機能テストで、副作用が発生することを検証します。

ガードレール

  • ORM 3.0 では EventSubscriberInterface を使った Doctrine サブスクライバーが削除されています。決して再導入しないでください。
  • グローバルライフサイクルリスナーでは、早い段階でエンティティの型をチェックしてください(すべてのエンティティに対して実行されるため)。
  • Doctrine イベントハンドラー内で flush() を呼び出さないでください。実行中の作業単位が破損します。
  • preUpdate には制約があります。フィールドの変更には $args->setNewValue() のみを使い、関連には決して触れないでください。

段階的な情報開示

  • 実行時の方針とリスク管理には、このファイルを使用してください。
  • 3つの仕組み、イベント引数の対応表、サブスクライバーからの移行については reference.md を開いてください。

出力要件

  • 正しい属性を付与したリスナー/コールバッククラス。
  • 選択した仕組みの根拠。
  • 検証結果(副作用が発生したことを確認するテスト)。

参考資料

  • reference.md
  • docs/complexity-tiers.md

コメント