Symfony2 Доктрина Слушатель postPersist не вызывает

Я следовал примеру кода, чтобы попытаться заставить моего слушателя событий доктрины работать. Однако, несмотря на то, что класс создается в объекте (я знаю это, потому что я зарегистрировал __construct, и __destructor также вызывается, функция postPersist никогда не делает.

Мой файл services.yml имеет следующее (находится в AH / Core / SolutionBundle / Resources / config / services.yml):

solutions_core_reverse_sync:
class: AH\Core\SolutionBundle\Listener\ClientSolutionReverseSyncListener
arguments: [@service_container]
tags:
- { name: doctrine.event_listener, event: postPersist }

(Также файл services.yml загружается в AH / Core / SolutionBundle / DependencyInjection / SolutionExtension.php — подтверждено, потому что другие службы работают нормально)

Моя сущность — это просто стандартная сущность доктрины, в этом нет ничего особенного, за исключением использования нескольких дополнительных интеграций на основе аннотаций, таких как JMS Serializer. Единственное, что отличается от большинства других сущностей, это то, что мы используем стандартную SingleTableInheritence из Doctrine, используя аннотацию @ORM \ DiscriminatorMap и дочерние сущности.

У моего слушателя сейчас есть только скелет, чтобы проверить, работает ли он без каких-либо помех:

<?php
namespace AH\Core\SolutionBundle\Listener;

use Symfony\Component\DependencyInjection\Container;
use Doctrine\ORM\Event\LifecycleEventArgs;

class ClientSolutionReverseSyncListener
{
protected $container;

public function __construct(Container $container)
{
$this->container = $container;

echo __CLASS__.' __construct'.PHP_EOL;
}

public function postPersist(LifecycleEventArgs $args)
{
echo __CLASS__.' postPersist fired'.PHP_EOL;
}

public function __destruct()
{
echo __CLASS__.' __destruct'.PHP_EOL;
}
}

При тестировании и выполнении приведенного ниже кода я вижу только запуск __construct и __destruct (посредством эха), но не postPersist:

$cs = $csm->findClientSolutionById(123); // don't worry where $csm comes from
$cs->setUid('do some update: '.rand(0,10000));
$this->em->persist($cs);

Образец вывода:

AH \ Core \ SolutionBundle \ Listener \ ClientSolutionReverseSyncListener __construct
AH \ Core \ SolutionBundle \ Listener \ ClientSolutionReverseSyncListener __destruct

Я в недоумении, где я ошибся здесь, это следует за документами очень близко:
Учебная документация

Я также проверил этот документ, который похож на выше:
Документация Symfony вокруг слушателей

0

Решение

Здесь объяснение, и реализация Итак, вам нужно сбросить изменения, если вы хотите, чтобы событие было запущено. Сохранение сущностей без очистки их не генерирует первичный ключ. Также сохраняющиеся сущности не вызывают операции вставки базы данных.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]