Я создаю приложение, в котором пользователь может редактировать некоторые данные, а затем получает экран, на котором он может подтвердить (и прокомментировать) свои изменения.Symfony 2/Doctrine 2: получить изменения в PersistentCollection
В форме подтверждения отображаются изменения, внесенные в объект. Это работает для «нормальных» полей. Вот код, который работает для проверки одного поля:
// create $form
// bind $form
if ($form->isValid() {
$data = $form->getData();
// example, get changes of a "normal" field
if ($data['color'] != $entity->getColor()) {
// do something with changes
}
}
Но я не могу сделать то же самое для отношения (пример ManyToMany с пользователями):
if ($data['users'] != $entity->getUsers()
не работает, потому что $ data ['users'] и $ entity-> getUsers() относятся к одной и той же постоянной коллекции. Можно назвать эту функцию, чтобы увидеть, если есть изменения:
if ($data['users']->isDirty())
, но это не возможно, чтобы увидеть, какие изменения были сделаны.
Вторая проблема заключается в том, что если все элементы удалены из постоянной коллекции, Doctrine не помещает ее как «измененную» (isDirty() = true), поэтому я не могу поймать конкретное изменение, пользователь удаляет всех «пользователей» из объекта в форме.
Обратите внимание, что код работает, единственная проблема заключается в том, что я не могу просмотреть/обработать изменения, сделанные на шаге подтверждения.
Извлечь $ entity-> getUsers() перед связыванием? Также проверьте и посмотрите, добавляет ли ваш тип формы поле по ссылке. – Lighthart
@ Lighthart это хорошая идея (по ссылке)! Будет проверять и возвращаться к вам ... – mogoman
@Lighthart не работает, потому что ссылка предназначена для коллекций, а не для Entity для полей – mogoman