symfony form - удалить вложенный объект формы - PullRequest
2 голосов
/ 18 августа 2010

У меня есть две формы Symfony:

ShoppingListForm
ShoppingListItemForm

Я много раз встраиваю форму ShoppingListItemForm в форму ShoppingListForm. то есть список покупок содержит много предметов.

Итак, ShoppingListItemForm состоит из двух виджетов:

item_id (checkbox) 
shopping_list_id (hidden - foreign key)

Я хотел бы удалить соответствующий объект ShoppingListItem, если объект существует и флажок не установлен.

Я не уверен, как будет происходить это удаление? Буду ли я использовать средство проверки сообщений, чтобы увидеть, какие поля были / не были отмечены? Я немного запутался в этом.

Ответы [ 2 ]

4 голосов
/ 18 августа 2010

Я бы сделал это, перезапустив метод updateObject в ShoppingListForm и поместив туда свои собственные вызовы delete () и т. Д. (Обязательно вызовите parent :: updateObject () внутри него).

В зависимости от того, какЕсли вы реализуете его, вам также может потребоваться удалить встроенные формы и их значения, чтобы гарантировать, что сохранение по-прежнему работает правильно для остальных объектов.Попробуйте без, но если вы это сделаете, вам нужно очистить следующее:

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

Если вы хотите увидеть пользовательский метод updateObject, чтобы получить представление о том, как взаимодействовать со значениями и т. Д .:

http://www.symfony -project.org / форма / 1_2 / а / 11-Doctrine-Интеграция # chapter_11_sub_customizing_the_updateobject_method

0 голосов
/ 18 августа 2010

лично я бы перебрал существующие элементы списка, чтобы увидеть, отмечены ли соответствующие флажки в действии, и вызвал метод delete() для элементов, для которых это не так. Я не думаю, что это цель проверки сообщений, я бы сделал это прямо в действии.

...