doctrine-events について
doctrine-eventsは、エンティティ永続化時の副作用やDoctrineイベントの設計を扱うSymfony開発スキルです。ORM 3へのサブスクライバー移行も含み、コールバックやリスナーの選択・設定と、実データベースを使った機能テストを案内します。
主な機能
- 01コールバックやリスナー種別の選択
- 02属性によるリスナー設定
- 03イベント別引数クラスの使用
- 04実データベースで副作用をテスト
- 05ORM 3移行時の注意点
活用シーン
- 01永続化時のタイムスタンプやslugの追加
- 02イベント経由での検索インデックスや通知
- 03ORM 3向けDoctrineサブスクライバーの移行
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dev-toolings/ superpowers-symfony --skill doctrine-eventsインストール後、Claude Code で/doctrine-eventsを入力して読み込まれたか確認します。
同梱ファイルreference.md
詳細
Doctrine イベント(Symfony)
使用する場面
- エンティティの永続化時に副作用(タイムスタンプ、スラッグ、検索インデックス作成、通知)が必要な場合。
EventSubscriberInterfaceを実装した Doctrine サブスクライバーを ORM 3 に移行する場合。- ライフサイクルコールバック、エンティティリスナー、グローバルライフサイクルリスナーのどれを選ぶか判断する場合。
デフォルトのワークフロー
- 最も対象範囲の狭い仕組みを選びます。コールバック(単一のエンティティ、依存関係なし)→ エンティティリスナー(単一のエンティティ、サービスが必要)→ ライフサイクルリスナー(横断的、すべてのエンティティ)。
- 属性(
#[ORM\HasLifecycleCallbacks]、#[AsEntityListener]、#[AsDoctrineListener])を使って設定します。 - イベント引数には、イベントごとのクラス(
PostPersistEventArgs、PreUpdateEventArgs、…)を型指定します。 - 実際の DB に対する的を絞った機能テストで、副作用が発生することを検証します。
ガードレール
- ORM 3.0 では
EventSubscriberInterfaceを実装した Doctrine サブスクライバーが削除されています。再導入してはいけません。 - グローバルライフサイクルリスナーはすべてのエンティティで実行されるため、エンティティの型を早い段階で確認してください。
- Doctrine イベントハンドラー内で
flush()を呼び出してはいけません。処理中の作業単位が破損します。 preUpdateには制限があります。フィールドの変更には$args->setNewValue()のみを使い、関連には触れてはいけません。
段階的な情報開示
- 実行方針とリスク管理には、このファイルを使用してください。
- 3 つの仕組み、イベント引数の対応表、サブスクライバーからの移行については、
reference.mdを開いてください。
出力要件
- 適切な属性を設定したリスナー/コールバッククラス。
- 選択した仕組みの理由。
- 検証結果(副作用の発生を確認するテスト)。
参考資料
reference.md
コメント
Markdown 対応