私は、ユーザーがデータを編集できるアプリケーションを構築しています。そこで、編集内容を確認(およびコメント)できる画面が表示されます。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
}
}
は、しかし、私は関係(ユーザーとの例多対多)のために同じことを行うことはできません。
if ($data['users'] != $entity->getUsers()
は$ので動作しません。 data ['users']と$ entity-> getUsers()は同じ永続コレクションを参照します。この関数を呼び出して、変更があるかどうかを確認することができます。
if ($data['users']->isDirty())
ただし、どのような変更が加えられたかはわかりません。
上記の2番目の問題は、すべてのアイテムが永続コレクションから削除された場合、Doctrineはそれを「変更済み」(isDirty()= true)としてマークしないため、ユーザーはフォーム内のエンティティからすべての「ユーザー」を削除します。
コードはすべて動作しますが、唯一の問題は、確認手順で行った変更を表示/処理できないことです。
bind前に$ entity-> getUsers()を取得しますか?また、あなたのフォームタイプが参照によってフィールドを追加しているかどうかを確認してください。 – Lighthart
@ライトハートそれは良いアイデアです(参考)!確認して、あなたに戻ってきます... – mogoman
@Lighthartはコレクションによる参照であり、フィールドのEntityではないために動作しません – mogoman