Ho un listener postUpdate e vorrei sapere quali erano i valori precedenti all'aggiornamento e quali erano i valori per la voce DB dopo l'aggiornamento. C'è un modo per farlo in Symfony 2.1? Ho esaminato ciò che è memorizzato in getUnitOfWork() ma è vuoto poiché l'aggiornamento ha già avuto luogo.Scoprire cosa è cambiato tramite listener postUpdate in Symfony 2.1
6
A
risposta
7
Trovato la soluzione here. Quello di cui avevo bisogno era in realtà parte di preUpdate(). Avevo bisogno di chiamare getEntityChangeSet() sul LifecycleEventArgs.
Il mio codice:
public function preUpdate(Event\LifecycleEventArgs $eventArgs)
{
$changeArray = $eventArgs->getEntityChangeSet();
//do stuff with the change array
}
-1
Potete trovare example nella documentazione dottrina.
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
L'OP ha chiesto espressamente che "i valori erano precedenti all'aggiornamento e quali erano i valori per la voce DB successiva all'aggiornamento", la risposta richiede una chiamata al metodo per ogni colonna che dovrebbe essere codificata. – ahonnecke
0
tuo entitiy:
/**
* Order
*
* @ORM\Table(name="order")
* @ORM\Entity()
* @ORM\EntityListeners(
* {"\EventListeners\OrderListener"}
*)
*/
class Order
{
...
vostro ascoltatore:
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;
}
}
Problemi correlati
- 1. Imposta locale in Symfony 2.1
- 2. Symfony 2 - a filo in postUpdate evento fuoco PreUpdate
- 3. Imposta Flash in Symfony 2.1
- 4. Autoloading di una classe in Symfony 2.1
- 5. Scoprire quando il codice è cambiato in git
- 6. Modifica delle impostazioni internazionali con symfony 2.1
- 7. Listener Doctrine - Esegui azione solo se un campo è cambiato
- 8. Elastic Load Balancer con Symfony 2.1
- 9. Symfony 2.1 - Uncaught PHP Eccezione Twig_Error_Runtime
- 10. Login API Symfony 2.1 REST ovunque
- 11. Symfony 2.1 Sonata Admin Bundle OneToMany
- 12. Scoprire cosa è stata utilizzata vista EJB
- 13. cosa è l'origine mappato, come scoprire
- 14. Come installare il proprio bundle con Composer in Symfony 2.1?
- 15. Accesso al database in un listener in Symfony 2
- 16. Qual è la differenza tra postUpdate e sendCommand in openHAB
- 17. Cosa è cambiato nel modello di memoria in .NET 4.5?
- 18. Listener non chiamato in Console Comando
- 19. Come scoprire cosa causa BadTokenExceptions
- 20. Aggiunta di ulteriori chiamate persistenti alla chiamata preUpdate in Symfony 2.1
- 21. Convalida degli elementi all'interno di un array - Symfony 2.1
- 22. Come scoprire cosa aspetta mach_msg_trap?
- 23. Filtro ajax Symfony 2.1 con pacchetto Paginator KNP
- 24. Aggiornamento symfony da 2.1 a 2.2 errore compositore
- 25. eventi preUpdate e postUpdate non attivati su Doctrine 2
- 26. Come scoprire che cosa sta intercettando 'method_missing'
- 27. Nexus One - versione Android 2.1, dove è l'SDK per 2.1?
- 28. Symfony assetic sass filter tramite node-sass?
- 29. Doctrine post Salvataggio, PostUpdate e Internazionalizzazione (Rileva modifica)
- 30. Vedere cosa è stato installato tramite MacPorts
Forse cercavi 'PreUpdate (Event \ PreUpdateEventArgs $ eventArgs)'? Il metodo 'getEntityChangeSet()' non esiste in 'LifecycleEventArgs' – Lughino
Il collegamento è rotto, si prega di aggiornarlo se possibile. – mboullouz
collegamento Autorizzazione negata –