Bir postUpdate dinleyicim var ve değerlerin güncellemeden önce ne olduğunu ve DB girdisi için güncelleme sonrasında ne olduğunu öğrenmek istiyorum. Bunu Symfony 2.1'de yapmanın bir yolu var mı? GetUnitOfWork() 'da neyin saklandığına baktım ama güncelleme zaten gerçekleşmiş olduğundan boş.Symfony 2.1'de postUpdate dinleyicisi aracılığıyla nelerin değiştiğini bulma
6
A
cevap
7
Çözüm bulundu here. İhtiyacım olan şey aslında preUpdate() programının bir parçasıydı. LifecycleEventArgs üzerinde getEntityChangeSet() öğesini çağırmam gerekiyordu.
Kodum:
public function preUpdate(Event\LifecycleEventArgs $eventArgs)
{
$changeArray = $eventArgs->getEntityChangeSet();
//do stuff with the change array
}
-1
Sen doktrin belgelerinde example bulabilirsiniz.
class NeverAliceOnlyBobListener
{
public function preUpdate(PreUpdateEventArgs $eventArgs)
{
if ($eventArgs->getEntity() instanceof User) {
if ($eventArgs->hasChangedField('name') && $eventArgs->getNewValue('name') == 'Alice') {
$eventArgs->setNewValue('name', 'Bob');
}
}
}
}
+0
OP özellikle "değerler güncellemeden önce ve DB girdisi için güncellemeden sonra ne olduğunu" sordu, yanıtınız her kod için kodlanmış olması gereken bir yöntem çağrısı gerektiriyor. – ahonnecke
0
Sizin eden taraf:
/**
* Order
*
* @ORM\Table(name="order")
* @ORM\Entity()
* @ORM\EntityListeners(
* {"\EventListeners\OrderListener"}
*)
*/
class Order
{
...
telsizinde:
aradınızclass OrderListener
{
protected $needsFlush = false;
protected $fields = false;
public function preUpdate($entity, LifecycleEventArgs $eventArgs)
{
if (!$this->isCorrectObject($entity)) {
return null;
}
return $this->setFields($entity, $eventArgs);
}
public function postUpdate($entity, LifecycleEventArgs $eventArgs)
{
if (!$this->isCorrectObject($entity)) {
return null;
}
foreach ($this->fields as $field => $detail) {
echo $field. ' was ' . $detail[0]
. ' and is now ' . $detail[1];
//this is where you would save something
}
$eventArgs->getEntityManager()->flush();
return true;
}
public function setFields($entity, LifecycleEventArgs $eventArgs)
{
$this->fields = array_diff_key(
$eventArgs->getEntityChangeSet(),
[ 'modified'=>0 ]
);
return true;
}
public function isCorrectObject($entity)
{
return $entity instanceof Order;
}
}
İlgili konular
- 1. Gitmeden önce dosyada nelerin değiştiğini nasıl görebilirim?
- 2. İçerik dinleyicisi aracılığıyla olay dinleyicisi kaldırılamıyor
- 3. Yetkilendirme denetleyicisi olan Symfony kernel.response dinleyicisi
- 4. Symfony2'nin olay dinleyicisi
- 5. JTextPane değerinin değiştiğini hangi dinleyici biliyor olabilir?
- 6. Android Hangi Kişinin değiştiğini nasıl tespit edersiniz?
- 7. Saatleri nelerin kaydedildiğini nasıl anlarım?
- 8. Nelerin geri alınacağını nasıl öğrenebilirim?
- 9. Neden stdio'nun değiştiğini gdb görmüyor?
- 10. symfony olarak Symfony 2
- 11. Symfony2 ile Doktrin OracleSessionInit dinleyicisi nasıl kullanılır?
- 12. Symfony
- 13. Symfony
- 14. Symfony
- 15. Symfony
- 16. Symfony
- 17. Symfony
- 18. Symfony
- 19. Symfony
- 20. Symfony
- 21. Symfony2 özel olay dağıtıcısı ve dinleyicisi
- 22. Symfony 2 veya Symfony 1.4?
- 23. Visual C++ 2010 Express'ten nelerin eksik?
- 24. Henüz nelerin içe aktarılmadığını gösteren görünüm
- 25. React Native - AsyncStorage'da nelerin depolandığını nasıl görebilirsiniz?
- 26. WooCommerce kullanarak google'da nelerin endeksleneceğini nasıl değiştirebilirim?
- 27. Dosya yüklemeleri için Angular2 sunucu tarafı dinleyicisi
- 28. DoTakTrin 2 tetiklenmeyen preUpdate ve postUpdate olayları 2
- 29. olay dinleyicisi pencereden ayarlanmış bir olay dinleyicisi kaldırmak gerekir
- 30. Java eylem dinleyicisi
'preUpdate (Olay \ PreUpdateEventArgs $ eventArgs)'? 'GetEntityChangeSet()' yöntemi 'LifecycleEventArgs' içinde mevcut değil – Lughino
Bağlantı bozuksa, lütfen mümkünse güncelleştirin. – mboullouz
bağlantı İzin Reddedildi –