slug
エンティティがアプリに保存されたら、そのフィールドをルックアップ テーブルに追加したいと考えています。これをできるだけ邪魔にならないようにするために、イベントサブスクライバーを作成しました。この投稿によると、私INSERT
はイベントに参加できないpostUpdate
ので、試しましたpostFlush
:
class SlugsSubscriber implements EventSubscriber {
public function getSubscribedEvents() {
return array('postFlush');
}
public function postFlush(PostFlushEventArgs $args) {
$em = $args->getEntityManager();
$needsFlush = false;
error_log("postFlush");
foreach ($em->getUnitOfWork()->getScheduledEntityInsertions() as $entity) {
// To prevent short-circuit
$tmp = $this->registerSlugs($entity, $entityManager);
if($tmp) $needsFlush = true;
}
foreach ($em->getUnitOfWork()->getScheduledEntityUpdates() as $entity) {
// To prevent short-circuit
$tmp = $this->registerSlugs($entity, $entityManager);
if($tmp) $needsFlush = true;
}
if($needsFlush) {
error_log("Flushing");
$em->flush();
}
}
protected function registerSlugs($entity, EntityManager $entityManager) {
error_log("register slugs");
if($entity instanceof Product) {
$this->registerProductSlugs($entity, $entityManager);
return true;
} elseif($entity instanceof Category) {
$this->registerCategorySlugs($entity, $entityManager);
return true;
}
return false;
}
}
ただし、エンティティを保存しようとするregisterSlugs
と、更新時でも新しい挿入時でも、メソッドは呼び出されません。
どこで私は間違えましたか?