Question

J'ai deux formes Symfony:

ShoppingListForm
ShoppingListItemForm

Je l'intégration ShoppingListItemForm à l'intérieur des ShoppingListForm plusieurs fois. à-dire une liste d'achats contient de nombreux éléments.

Ainsi, le ShoppingListItemForm se compose de deux widgets:

item_id (checkbox) 
shopping_list_id (hidden - foreign key)

Ce que je voudrais faire est de supprimer l'objet ShoppingListItem correspondant si l'objet existe et la case est décochée.

Je ne sais pas comment cette suppression se produirait? Est-ce que j'utiliser un post validateur pour voir quels champs ont / ont pas été vérifiés? Je suis un peu perdu sur celui-ci.

Était-ce utile?

La solution

Je le faire de plus-riding méthode updateObject du ShoppingListForm et de mettre votre commande delete () etc appels là-dedans (assurez-vous de parent d'appel :: updateObject () en son sein).

Selon la façon dont vous le mettre en œuvre, vous pouvez aussi avoir besoin d'enlever les formes embarquées et leurs valeurs pour assurer l'enregistrement fonctionne toujours correctement pour les objets restants. Essayez sans, mais si vous le faites, vous devez effacer les éléments suivants:

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

Si vous voulez voir une méthode updateObject personnalisé pour avoir une idée comment interagir avec les valeurs etc:

http: //www.symfony-project .org / formes / 1_2 / fr / 11 Doctrine-intégration # chapter_11_sub_customizing_the_updateobject_method

Autres conseils

personellement, je boucle à travers les éléments de liste existants pour voir si les cases correspondantes sont vérifiées dans l'action, et appeler la méthode delete() sur les éléments pour lesquels il n'est pas le cas. Je ne pense pas que ce soit dans le but d'un post validateur, je le faire directement dans l'action.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top