EntityListener preUpdate prePersist не вызывается - PullRequest
0 голосов
/ 30 апреля 2019

Я часто использую прослушиватели событий доктрины, но это мой первый прослушиватель сущностей.

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 ...

1 Ответ

0 голосов
/ 30 апреля 2019

Во-первых, поскольку вы не обновляете свою сущность до prePersist / preUpdate, вам не нужно пересчитывать ее.

Во-вторых, вам не нужны аннотации для слушателя службы. Пожалуйста, прочитайте эту документацию для получения дополнительной информации. Я думаю, довольно ясно, что вы должны делать: https://www.doctrine -project.org / projects / doctrine-orm / en / 2.6 / reference / events.html # listen-and-subscribing-to-lifecycle-events

...