2 Stimmen

symfony form - eingebettetes Formularobjekt löschen

Ich habe ein zwei Symfony Formulare:

ShoppingListForm
ShoppingListItemForm

Ich bette das ShoppingListItemFormular innerhalb des ShoppingListFormulars ein, d.h. eine Einkaufsliste enthält viele Artikel.

Die ShoppingListItemForm besteht also aus zwei Widgets:

item_id (checkbox) 
shopping_list_id (hidden - foreign key)

Was ich tun möchte, ist das entsprechende ShoppingListItem-Objekt zu löschen, wenn das Objekt existiert und das Kontrollkästchen nicht markiert ist.

Ich bin mir nicht sicher, wie diese Löschung zustande kommen würde? Würde ich einen Post-Validator verwenden, um zu sehen, welche Felder geprüft wurden/welche nicht? Ich bin ein bisschen verloren auf diese ein.

4voto

benlumley Punkte 11241

Ich würde dies tun, indem Sie die ShoppingListForm's updateObject-Methode überschreiben und Ihre benutzerdefinierten delete() usw. Anrufe in dort (sicher sein, parent::updateObject() innerhalb es aufrufen).

Je nachdem, wie Sie es implementieren, müssen Sie möglicherweise auch die eingebetteten Formulare und ihre Werte entfernen, um sicherzustellen, dass das Speichern für die verbleibenden Objekte weiterhin korrekt funktioniert. Versuchen Sie es ohne, aber wenn Sie das tun, müssen Sie Folgendes löschen:

unset($taintedValues['ShoppingListItem'][$key]);
unset($this->embeddedForms['ShoppingListItem'][$key]);
unset($this->validatorSchema['ShoppingListItem'][$key]);
unset($taintedFiles['ShoppingListItem'][$key]);

Wenn Sie eine benutzerdefinierte updateObject-Methode sehen möchten, um eine Vorstellung davon zu bekommen, wie man mit Werten usw. interagiert:

http://www.symfony-project.org/forms/1_2/en/11-Doctrine-Integration#chapter_11_sub_customizing_the_updateobject_method

0voto

greg0ire Punkte 21999

Ich persönlich würde eine Schleife durch die vorhandenen Listenelemente ziehen, um zu sehen, ob die entsprechenden Kontrollkästchen in der Aktion aktiviert sind, und die delete() Methode bei den Artikeln, bei denen dies nicht der Fall ist. Ich glaube nicht, dass dies der Zweck eines Post-Validators ist, ich würde dies direkt in der Aktion tun.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X