2016-05-04 8 views
0

Ich habe eine Post Einheit und..Symfony - Formularereignis - neue und alte Daten erhalten

Post-Entity haben Feld $requireModeration es bedeutet, dass jemand diesen Beitrag überprüfen und genehmigen muss, bevor es veröffentlicht werden kann.

Wenn ich Post bearbeite, möchte ich alten Postwert und neuen Postwert vergleichen. Und wenn Wert geändert wird, möchte ich auch requireModeration Flag auf True ändern.

Kann ich das über Formularereignisse tun?
Etwas wie folgt aus:

public function postSubmit(FormEvent $event) 
{ 
    $newPost = $event->getData(); 
    $newContent = $post->getContent(); // return new contant of post 
    $oldPost = ... // here I want to get old post 
    $oldContent = $oldPost->getContent(); 

    if($newContent != $oldContent) { 
     // ... 
    } 
} 

Aber leider kann ich nur neue bekommen, schickte nur Daten über FormEvent Objekt.

+0

Sie müssen das Entitätsobjekt, mit dem Sie die Formularfelder füllen, nachverfolgen, um das neue und das alte Formular zu vergleichen. Wenn Sie die neuen Daten bereitstellen, wird das Formularereignis über keine vorherigen Daten verfügen. – LMS94

Antwort

0

Sie sollten Doctrine Lifecycle-Ereignisse und UnitOfWork für dieses anstelle von Formularereignissen verwenden (ich nehme an, dass Sie Doctrine bei Ihrem Projekt verwenden).

preUpdate Zuhörer auf Ihre Post Einheit hinzufügen und so etwas wie:

$uow = $em->getUnitOfWork(); 
$changeset = $uow->getEntityChangeSet($entity); 

In $changeset Variable Sie Felder Liste haben, die in den $entity während aktueller Anforderung mit ihren alten und neuen Werten geändert wurden.

+0

Mhm. Und wenn ich "requireModeration" ändere, wie kann ich es wieder in meine Entity einfügen? –

+0

Sie rufen einfach $ entity-> setRequireModeration (true); im Zuhörer –

0
public function postSubmit(FormEvent $event) 
{ 
    $newPost = $event->getData(); 
    $newContent = $newPost->getContent(); 
    $uow = $this->em->getUnitOfWork(); 
    $oldPost = $uow->getOriginalEntityData($post); 
    $oldContent = $OriginalEntityData["content"]; 

    if($newContent != $oldContent) { 
     // ... 
    } 
} 
Verwandte Themen