form di symfony - eliminazione oggetto modulo incorporato
-
29-09-2019 - |
Domanda
Ho un due forme Symfony:
ShoppingListForm
ShoppingListItemForm
sto incorporando lo ShoppingListItemForm all'interno delle ShoppingListForm molte volte. vale a dire una lista della spesa contiene molti elementi.
Così lo ShoppingListItemForm si compone di due widget:
item_id (checkbox)
shopping_list_id (hidden - foreign key)
Quello che vorrei fare è eliminare l'oggetto corrispondente ShoppingListItem se l'oggetto esiste e la casella di controllo è lasciato incontrollato.
Non sono sicuro di come questo si sarebbe verificato di eliminazione? Dovrei usare un post validatore per vedere quali campi sono / non sono stati controllati? Sono un po 'perso su questo.
Soluzione
mi piacerebbe fare questo da un eccesso di sella il metodo updateObject del ShoppingListForm e mettendo cancellare la vostra abitudine () ecc chiamate in là (assicuratevi di genitore chiamata :: updateObject () all'interno di esso).
A seconda di come si implementa, si può anche essere necessario rimuovere i moduli incorporati ei loro valori per garantire il salvataggio funziona ancora correttamente per i restanti oggetti. Provare senza, ma se lo fai, è necessario cancellare il seguente:
unset($taintedValues['ShoppingListItem'][$key]);
unset($this->embeddedForms['ShoppingListItem'][$key]);
unset($this->validatorSchema['ShoppingListItem'][$key]);
unset($taintedFiles['ShoppingListItem'][$key]);
Se volete vedere un metodo updateObject personalizzato per avere un'idea di come interagire con i valori etc:
Altri suggerimenti
personalmente, avrei ciclo tra gli elementi di elenco esistenti per vedere se le caselle di controllo corrispondenti sono controllati in azione, e chiamare il metodo delete()
sui punti per i quali non è il caso. Non credo che è lo scopo di un post validatore, vorrei farlo direttamente nell'azione.