Ich erstelle eine Anwendung, in der der Benutzer einige Daten bearbeiten kann und dann einen Bildschirm erhält, auf dem er seine Änderungen bestätigen (und kommentieren) kann.Symfony 2/Doctrine 2: Änderungen an PersistentCollection erhalten
Im Bestätigungsformular zeige ich die Änderungen an, die an der Entität vorgenommen wurden. Dies funktioniert für "normale" Felder. Hier ist ein Code, der für die Überprüfung ein einzelnes Feld funktioniert:
// create $form
// bind $form
if ($form->isValid() {
$data = $form->getData();
// example, get changes of a "normal" field
if ($data['color'] != $entity->getColor()) {
// do something with changes
}
}
Aber ich kann nicht das Gleiche tun für eine Beziehung (zB ManyToMany mit Benutzer):
if ($data['users'] != $entity->getUsers()
nicht, weil $ funktioniert data ['Benutzer'] und $ entity-> getUsers() beziehen sich auf die gleiche persistente Sammlung. Es ist möglich, diese Funktion aufzurufen, um zu sehen, ob es Änderungen sind:
if ($data['users']->isDirty())
aber es ist nicht möglich, zu sehen, welche Änderungen vorgenommen wurden. Das zweite Problem mit dem Obigen ist, dass, wenn alle Elemente aus der persistenten Sammlung entfernt werden, Doctrine es nicht als "geändert" markiert (isDirty() = true), so dass ich die spezifische Änderung nicht abfangen kann Der Benutzer entfernt alle "Benutzer" aus der Entität im Formular.
Bitte beachten Sie, dass der Code funktioniert, das einzige Problem, das ich habe, ist, dass ich nicht in der Lage bin, die im Bestätigungsschritt vorgenommenen Änderungen anzuzeigen/zu verarbeiten.
$ Entity-> getUsers() vor dem Binden abrufen? Überprüfen Sie auch, ob Ihr Formulartyp das Feld durch Verweis hinzufügt. – Lighthart
@Lighthart, das ist eine gute Idee (durch Bezugnahme)! Wird überprüfen und zurück zu dir ... – mogoman
@Lighthart funktioniert nicht, weil der Verweis für Sammlungen und nicht für Entität für Felder – mogoman