Я часто использую прослушиватели событий доктрины, но это мой первый прослушиватель сущностей.
class ReportListener
{
/** @ORM\PreUpdate */
public function preUpdate(Report $report, PreUpdateEventArgs $args)
{
$report->updatedAt = new \DateTime();
$this->logger->debug('UpdatedAt ' . $report->updatedAt->format('c')); // I get *NO* log !!!
$this->entityManager->getUnitOfWork()->recomputeSingleEntityChangeSet(
$this->entityManager->getClassMetadata(Report::class), $report); // is this necessary?
}
public function prePersist(Report $report, LifecycleEventArgs $args)
{
$report->updatedAt = new \DateTime();
$this->logger->debug('UpdatedAt ' . $report->updatedAt->format('c')); // not called!
$this->entityManager->getUnitOfWork()->recomputeSingleEntityChangeSet(
$this->entityManager->getClassMetadata(Report::class), $report); // do I need that?
}
public function postUpdate(Report $report, LifecycleEventArgs $args)
{
// IS CALLED !!!!
}
public function postPersist(Report $report, LifecycleEventArgs $args)
{
// IS CALLED !!!
}
}
#
Итак, он должен просто обновить метку времени updatedAt ... Моя сущностьстандартно:
@ORM\Table(name="report")
* @ORM\Entity()
* @ORM\EntityListeners({"App\EventListener\ReportListener"})
*/
class Report {...}
Я использую это в контексте Symfony, я даже зарегистрировал каждое событие явно, но не повезло.
report_listener:
class: App\EventListener\ReportListener
tags:
- { name: doctrine.orm.entity_listener, event: preUpdate}
- { name: doctrine.orm.entity_listener, event: prePersist}
- { name: doctrine.orm.entity_listener, event: postUpdate}
- { name: doctrine.orm.entity_listener, event: postPersist}
Другой вопрос, если мне действительно нужно пересчитатьизменение установлено в PrePersist и preUpdate ...