我正在构建一个应用程序,用户可以在其中编辑一些数据,然后显示一个屏幕,他可以在其中确认(和评论)他的编辑。
在确认表单中,我显示了对实体所做的更改。这适用于“正常”字段。下面是一些用于检查单个字段的代码:
// 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())
但无法查看进行了哪些更改。
上面的第二个问题是,如果从持久化集合中删除所有项目,Doctrine 不会将其标记为“已更改”(isDirty() = true),因此我无法捕捉到用户删除所有“的具体更改”用户”来自表单中的实体。
请注意,代码一切正常,我唯一的问题是我无法查看/处理在确认步骤中所做的更改。