Mam walkę z następującymi, w klasie encji mam preUpdate lifeCycleCallback, który musi przetrwać nowy podmiot, zanim opróżni zmiany dla audytuTrail.Doctrine 2.1 Persist entity w preUpdate lifeCycleCallback
W preRemove i PrePersist działa to idealnie, ale w trybie przed aktualizacją nic się nie dzieje. Jeśli zadzwonię do flusha, przechodzi on w pętlę rekursywną.
Zgodnie z grupami dyskusyjnymi Google dla użytkownika doktryny umieszczenie go w OnFlush powinno być opcją, ale w takim przypadku nie mogę uzyskać dostępu do starych wartości obiektu, aby zapisać stare wartości w nowym obiekcie dla audittrail.
Jakiś mały przykład tego, co staram się archiwum:
<?php
/**
* @Entity
* @HasLifeCycleCallbacks
*/
class someEntity {
... annotations ...
/**
* @PreUpdate
*/
public function addAuditTrail() {
$em = \Zend_Registry::get('doctrine')->getEntityManager();
$entity = new AuditTrail();
$entity->action = 'update';
$entity->someField = $this->someField;
$em->persist($entity); //this just doesn't do anything :-(
}
}
?>
To nie jest prawdziwy kod, po prostu coś, aby zilustrować, co chcę. Próbowałem też coś takiego:
$em->getUnitOfWork()->computeChangeSet($em->getClassMetaData(get_class($entity)), $entity);
Które powinny pracować według tego tematu: http://groups.google.com/group/doctrine-user/browse_thread/thread/bd9195f04857dcd4
Gdybym ponownie wywołać rumieniec, ale powoduje, że Apache upaść z powodu jakiejś nieskończonej pętli.
Ktoś, kto ma pomysły dla mnie? Dzięki!
Dlaczego nie należy użyć menedżera jednostki wewnątrz mojego podmioty? A jeśli odwzorujesz AuditEntity na SomeEntity, to zostanie on powiązany z bazą danych i nie jest to tym, co chcę skopiować moje jednostki i dodać inne pola, takie jak "action" = update itd. To AuditEntity było tylko przykładem, ponieważ do audytu używam : https://github.com/keesschepers/EntityAudit –
Używałbym eventmanager. Chciałam rzucić okiem na twój kod, ale nie ma jeszcze czasu. – tvlooy
W końcu (rok temu!) Użyłem menedżera zdarzeń (EventSubscriber) do wykonywania tych zadań na całym świecie. Zawarłem to w mojej strukturze: https://github.com/php-pike/Pike (spójrz na część EntityAudit) dzięki! –