ユーザーが一部のデータを編集できるアプリケーションを構築しており、編集内容を確認 (およびコメント) できる画面が表示されます。
確認フォームに、エンティティに加えられた変更を表示します。これは「通常の」フィールドで機能します。単一のフィールドをチェックするために機能するコードを次に示します。
// 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 with Users) :
if ($data['users'] != $entity->getUsers()
$data['users'] と $entity->getUsers() が同じ永続コレクションを参照しているため、機能しません。この関数を呼び出して、変更があるかどうかを確認できます。
if ($data['users']->isDirty())
しかし、どのような変更が行われたかを確認することはできません。
上記の 2 つ目の問題は、すべてのアイテムが永続コレクションから削除された場合、Doctrine はそれを「変更済み」としてマークしない (isDirty() = true) ため、ユーザーがすべてを削除した特定の変更をキャッチできないことです。 users」をフォームのエンティティから取得します。
コードはすべて機能することに注意してください。唯一の問題は、確認ステップで行われた変更を表示/処理できないことです。