Symfony2 / Doctrine: получите поля, которые изменились после изменения сущности «Loggable»
В проекте Symfony2 я использую расширение Loggable Doctrine.
I увидел что есть LoggableListener.
Действительно ли происходит событие, которое вызывается при изменении поля (регистрируемого) в регистрируемом объекте? Если это так, есть ли способ получить список полей, которые его вызвали?
Я представляю себе случай с сущностью, скажем, с 10 полями, из которых 3 регистрируемых. Для каждого из 3 я хочу выполнить некоторые действия, если они меняют значение, поэтому 3 действия будут выполнены, если 3 из них изменятся.
Любая идея?
Спасибо!
РЕДАКТИРОВАТЬ
После прочтения комментария ниже и прочтения документов о событиях в доктрине я понял, что у нас есть 3 варианта:
1) используяобратные вызовы жизненного цикла непосредственно на уровне сущности дажес аргументами если я использую доктрину> 2,4
2) я могуслушать и подписываться на события жизненного цикла, но в этом случае документы говорят, что"Lifecycle events are triggered for all entities. It is the responsibility of the listeners and subscribers to check if the entity is of a type it wants to handle."
3) делать то, что вы предлагаете, который используетСлушатель сущностигде вы можете определить на уровне сущности, какой слушатель будет «привязан» к классу.
Даже если первое решение кажется более простым, я прочитал, что «Вы также можете использовать этот прослушиватель для проверки всех измененных полей. Это более эффективно, чем использование обратного вызова жизненного цикла, когда требуются дорогие проверки». Что считается «дорогой проверкой?».
В моем случае я должен выполнить что-то вроде «если поле X объекта Y изменилось, чем добавить уведомление в таблицу уведомлений, говорящее« пользователь Z изменил значение X (Y) с A на B »
Какой подход был бы наиболее подходящим, учитывая, что у меня около 1000 таких полей?
EDIT2
Чтобы решить мою проблему, я пытаюсь внедрить службу service_container внутри слушателя, чтобы у меня был доступ к диспетчеру для отправки нового события, которое может выполнить сохранение новой сущности, в которой я нуждаюсь. Но как я могу это сделать?
Я пробовал обычным способом, добавляю следующее в service.yml
app_bundle.project_tolereances_listener:
class: AppBundle\EventListener\ProjectTolerancesListener
arguments: [@service_container]
и, конечно, я добавил следующее к слушателю:
protected $container;
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
но я получаю следующее:
Catchable Fatal Error: Argument 1 passed to AppBundle\ProjectEntityListener\ProjectTolerancesListener::__construct() must be an instance of AppBundle\ProjectEntityListener\ContainerInterface, none given, called in D:\provarepos\user\vendor\doctrine\orm\lib\Doctrine\ORM\Mapping\DefaultEntityListenerResolver.php on line 73 and defined
Любая идея?