我正在构建一个应用程序,用户可以在其中编辑一些数据,然后呈现一个屏幕,他可以在其中确认(并评论)他的编辑.
在确认表单中,我显示了对实体所做的更改.这适用于“普通”字段.以下是一些用于检查单个字段的代码:
// 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),因此我无法捕获用户删除所有内容的具体更改“用户“来自表单中的实体.
请注意,代码全部有效,我唯一的问题是我无法查看/处理在确认步骤中所做的更改.