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