Symfony Doctrineイベントの使用方法


  1. イベントのリスナーの作成: まず、イベントをリスナーで受け取るためのクラスを作成します。リスナークラスは、特定のイベントが発生した場合に実行されるコードを含んでいます。
use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Event\LifecycleEventArgs;
class MyEventListener implements EventSubscriber
{
    public function getSubscribedEvents()
    {
        return ['prePersist'];
    }
    public function prePersist(LifecycleEventArgs $args)
    {
        // エンティティが永続化される前に実行される処理
    }
}
  1. イベントの登録: 次に、イベントリスナーをDoctrineのイベントシステムに登録します。
# services.yaml
services:
  my_event_listener:
    class: App\EventListener\MyEventListener
    tags:
      - { name: doctrine.event_listener, event: prePersist }
  1. イベントの発火: イベントを発火させるために、エンティティの操作を行うクラスでイベントマネージャを使用します。
use Doctrine\ORM\EntityManagerInterface;
class BlogService
{
    private $entityManager;
    public function __construct(EntityManagerInterface $entityManager)
    {
        $this->entityManager = $entityManager;
    }
    public function createPost(Post $post)
    {
        // ポストの作成処理
        $this->entityManager->persist($post);
        $this->entityManager->flush();
        // イベントの発火
        $this->entityManager->getEventManager()->dispatchEvent('prePersist', new LifecycleEventArgs($post, $this->entityManager));
    }
}