symfony:doctrine-events について
Doctrine の永続化イベントを扱う Symfony 向け開発スキルです。イベント機構の選択や ORM 3 へのサブスクライバー移行を案内し、実データベースを使った対象機能テストを求めます。
主な機能
- 01コールバック・エンティティリスナー・ライフサイクルリスナーの選択
- 02属性によるリスナー設定
- 03イベント別の引数型の使用
- 04ORM 3 サブスクライバー移行の案内
- 05イベントハンドラーの制約
活用シーン
- 01永続化時にタイムスタンプや slug を追加
- 02永続化時にインデックス作成や通知を実行
- 03Doctrine サブスクライバーを 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)
使用する場面
- エンティティの永続化に伴う副作用(タイムスタンプ、スラッグ、検索インデックス作成、通知)が必要な場合。
EventSubscriberInterfaceを実装した Doctrine サブスクライバーを ORM 3 に移行する場合。- ライフサイクルコールバック、エンティティリスナー、グローバルライフサイクルリスナーのどれを使うか選ぶ場合。
デフォルトのワークフロー
- 最も対象を絞った仕組みを選びます。コールバック(1つのエンティティ、依存関係なし)→ エンティティリスナー(1つのエンティティ、サービスが必要)→ ライフサイクルリスナー(横断的、すべてのエンティティ)。
- 属性(
#[ORM\HasLifecycleCallbacks]、#[AsEntityListener]、#[AsDoctrineListener])を使って設定します。 - イベント引数には、イベントごとに定義されたクラス(
PostPersistEventArgs、PreUpdateEventArgs、…)を型指定します。 - 実際の DB を使った対象を絞った機能テストで、副作用が発生することを検証します。
ガードレール
- ORM 3.0 では
EventSubscriberInterfaceを使った Doctrine サブスクライバーが削除されています。決して再導入しないでください。 - グローバルライフサイクルリスナーでは、早い段階でエンティティの型をチェックしてください(すべてのエンティティに対して実行されるため)。
- Doctrine イベントハンドラー内で
flush()を呼び出さないでください。実行中の作業単位が破損します。 preUpdateには制約があります。フィールドの変更には$args->setNewValue()のみを使い、関連には決して触れないでください。
段階的な情報開示
- 実行時の方針とリスク管理には、このファイルを使用してください。
- 3つの仕組み、イベント引数の対応表、サブスクライバーからの移行については
reference.mdを開いてください。
出力要件
- 正しい属性を付与したリスナー/コールバッククラス。
- 選択した仕組みの根拠。
- 検証結果(副作用が発生したことを確認するテスト)。
参考資料
reference.mddocs/complexity-tiers.md
コメント
Markdown 対応