symfony form - удалить вложенный объект формы

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

ShoppingListForm
ShoppingListItemForm

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

Таким образом, ShoppingListItemForm состоит из двух виджетов:

item_id (checkbox) 
shopping_list_id (hidden - foreign key)

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

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

2 ответа

Решение

Я бы сделал это, переопределив метод 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/forms/1_2/en/11-Doctrine-Integration

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

Другие вопросы по тегам