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