Frage

Ich habe eine zwei Symfony Formen:

ShoppingListForm
ShoppingListItemForm

Ich bin Einbettung der ShoppingListItemForm innerhalb der ShoppingListForm viele Male. das heißt eine Einkaufsliste viele Elemente enthält.

So ist die ShoppingListItemForm besteht aus zwei Widgets:

item_id (checkbox) 
shopping_list_id (hidden - foreign key)

Was würde ich tun möchte, ist das entsprechende ShoppingListItem Objekt löschen, wenn das Objekt vorhanden ist, und das Kontrollkästchen ist nicht Einhalt geboten.

Ich bin mir nicht sicher, wie das Löschen auftreten würde? Würde ich einen Beitrag Validator nachschauen, welche Felder / nicht geprüft? Ich bin ein bisschen auf diesen einen verloren.

War es hilfreich?

Lösung

Ich würde dies tun, indem über Reiten die update Methode des ShoppingListForm und setzen Ihre benutzerdefinierten löschen () usw. Anrufe dort (unbedingt Anruf parent :: update () in ihr).

Je nachdem, wie Sie es implementieren, können Sie auch die eingebetteten Formen und ihre Werte entfernen müssen noch sicherstellen, Speichern korrekt für die übrigen Objekte funktioniert. Versuchen Sie, ohne, aber wenn Sie das tun, müssen Sie die folgende löschen:

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

Wenn Sie eine benutzerdefinierte Methode update um zu sehen, eine Vorstellung zu bekommen, wie mit Werten zu interagieren, etc:

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

Andere Tipps

personnally, würde ich Schleife durch die vorhandenen Listenelemente, um zu sehen, ob die entsprechenden Kontrollkästchen in der Aktion überprüft werden, und rufen Sie die delete() Methode auf die Elemente, für die es nicht der Fall ist. Ich glaube nicht, dass der Zweck eines Post-Validator ist, würde ich in der Aktion dies direkt tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top