Создание объекта журнала

Мне нужна ваша помощь, чтобы решить небольшую проблему.

Я пытаюсь зарегистрировать объект журнала с событием onflush. У меня есть рабочее решение для создания, редактирования или удаления сущности.

Но теперь я хочу зарегистрировать объект id, когда был вставлен новый объект. Событие onflush не управляет идентификатором, когда он был вызван Doctrine Lyfecylce. https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#onflush

Поэтому я должен попытаться работать с событием postflush. У меня есть объект id, но я не знаю, как его сохранить.

Вот небольшой код:

public function getSubscribedEvents()
    {
        return array(
            Events::onFlush,
            Events::postFlush,
        );
    }

public function postFlush(PostFlushEventArgs $args)
    {
        $this->log->setObjectId($this->element->getId());

        dump($this->element->getId()); // return element ID
        dump($this->log->getObjectId()); // return log attribute
// no data has been saved
    }

 public function onFlush(OnFlushEventArgs $args)
    {
        $em = $args->getEntityManager();
        $uow = $em->getUnitOfWork();

        if (sizeof($uow->getScheduledEntityInsertions()) > 0)
            $this->logEntityChangeSets($em, $uow, Log::STATUS_INSERT, $uow->getScheduledEntityInsertions());

        $uow->computeChangeSets();
    }

    public function logEntityChangeSets(EntityManager $em, UnitOfWork $uow, $status, Array $array)
{
// code for create Log entity and fill it
}

Благодарим за терпение и помощь.

это действительно зависит от того, как вы решите сохранить эту запись аудита. Будете ли вы делать это в той же базе данных? Или вы для этого обратитесь к совершенно другому стеку, например, к стеку ELK?

Jovan Perovic 03.09.2018 23:59

В настоящее время я хочу сохранить объект журнала в той же базе данных.

Quovandius 04.09.2018 09:45

В этом случае у вас хорошее начало, но просто убедитесь, что вы игнорируете onFlush для своих объектов Log (которые также будут проходить через поток persist/flush). Еще одна вещь, на которую следует обратить внимание, - это выполненные запросы DQL - обновления, выполненные таким образом, не проходят через методы жизненного цикла объекта и, следовательно, не будут записаны.

Jovan Perovic 04.09.2018 10:02

Итак, после события onflush просто обновите последний объект журнала с помощью команды DQL, чтобы игнорировать жизненный цикл доктрины? Думаю, это не лучшая практика: /

Quovandius 04.09.2018 17:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
4
47
0

Другие вопросы по теме