Ich habe einen PostUpdate-Listener und ich würde gerne wissen, was die Werte vor dem Update waren und was die Werte für den DB-Eintrag nach dem Update waren. Gibt es eine Möglichkeit, dies in Symfony 2.1 zu tun? Ich habe mir angesehen, was in getUnitOfWork() gespeichert ist, aber es ist leer, da das Update bereits stattgefunden hat.Herausfinden, was über PostUpdate-Listener in Symfony 2.1 geändert wurde
6
A
Antwort
7
Gefunden die Lösung here. Was ich brauchte, war tatsächlich Teil von preUpdate(). Ich musste getEntityChangeSet() auf LifecycleEventArgs aufrufen.
Mein Code:
public function preUpdate(Event\LifecycleEventArgs $eventArgs)
{
$changeArray = $eventArgs->getEntityChangeSet();
//do stuff with the change array
}
-1
Sie example in Lehre Dokumentation finden.
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 speziell gefragt "Werte waren vor der Aktualisierung und was die Werte für den DB-Eintrag nach der Aktualisierung waren", Ihre Antwort erfordert einen Methodenaufruf für jede Spalte, die hardcodiert werden müsste. – ahonnecke
0
Ihre Entitiy:
/**
* Order
*
* @ORM\Table(name="order")
* @ORM\Entity()
* @ORM\EntityListeners(
* {"\EventListeners\OrderListener"}
*)
*/
class Order
{
...
Ihre Zuhörer:
class 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;
}
}
Verwandte Themen
- 1. Set locale in Symfony 2.1
- 2. Wie kann ich herausfinden, ob eine Datei geändert wurde?
- 3. Autoloading einer Klasse in Symfony 2.1
- 4. Authentifizierung in Funktionstests in Symfony 2.1
- 5. Symfony 2.1 - Nicht abgefangene PHP Exception Twig_Error_Runtime
- 6. Symfony 2.1 - Schalten Monolog Kanal im Regler
- 7. REUSE_ALV_GRID_DISPLAY wurde in REUSE_ALV_LIST_DISPLAY geändert
- 8. Symfony 2.1 - injizierender entity_manager zu services.yml
- 9. Elastic Load Balancer mit Symfony 2.1
- 10. Symfony 2.1 REST API Login überall
- 11. Symfony 2.1 Sonata Admin Bundle OneToMany
- 12. Herausfinden, wo curl umgeleitet wurde
- 13. Herausfinden, welches Symbol in UIActivityViewController angeklickt wurde
- 14. Wie übergebe ich Optionen an CustomType im Sammlungsfeld Symfony 2.1?
- 15. Validieren von Elementen in einem Array - Symfony 2.1
- 16. Warum wurde die Eigenschaft INSTALLFOLDER nicht über die RadioButtonGroup geändert?
- 17. Installiere gwt 2.1 über 2.4
- 18. Symfony - Zugriffskontrolle über Regex
- 19. erkennen, ob etwas geändert wurde
- 20. Finden Sie, was geändert wurde und laden Sie nur Änderungen
- 21. MVC über Symfony
- 22. Herausfinden, ob der Browser Routen in React geändert hat
- 23. Herausfinden, wann ein MotionEvent beendet wurde
- 24. InvalidOperationException: Sammlung wurde geändert; Aufzählung
- 25. Datei wurde geändert? Jetzt in WPF behandeln?
- 26. Symfony 2.1 Ajax-Filter mit KNP Pagitor-Bundle
- 27. Symfony Update von 2.1 auf 2.2 Composer Fehler
- 28. Symfony Standard-Zeitzone will nicht funktionieren, wenn geändert
- 29. Wie kann ich herausfinden, wenn ein Sql-Datenbankfeld geändert wird?
- 30. Keine Datenbankverbindung über Doktrin in Symfony
Meinten Sie 'Preupdate (Ereignis \ PreUpdateEventArgs $ EventArgs)'? Die Methode 'getEntityChangeSet()' existiert nicht in 'LifecycleEventArgs' – Lughino
Die Verbindung ist kaputt, bitte aktualisieren Sie sie wenn möglich. – mboullouz
link Berechtigung verweigert –