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()
метод на предметы, для которых это не так. Я не думаю, что это цель пост-валидатора, я бы сделал это прямо в действии.