在Doctrine事件侦听器中更改未更改的属性

时间:2013-11-09 23:27:37

标签: events symfony doctrine-orm

当我尝试在Doctrine事件侦听器中为之前未更改的属性设置新值时,我遇到了由PreUpdateEventArgs::assertValidField引起的错误。它说我无法改变在事件发生之前没有改变的财产。

但是,如果我不能改变我想要的任何东西,那么使用教条生命周期有什么意义呢?我错过了什么?也许有另一种方法来改变对象的值而不是setNewValue方法?

UPD

@joaoalves好的,我会更详细地解释我的问题。我有文档A(不是实体,因为我使用的是MongoDB,但在这种情况下并不重要),它有两个属性:A :: $ foo和A :: $ bar。两者都是Doctrine映射归档的任何类型。

当我更改其中一个文件时,会触发preUpdate事件。例如,我改变了$ foo属性。现在要修改它,我必须使用$event->setNewValue解释here。例如:

public function preUpdate($event)
{
    $A = $event->getDocument();
    $A->setFoo('new value'); // this WILL NOT WORK because we have to use setNewValue()
    $event->setNewValue('foo', 'new value'); // WORKS as expected.
}

这是我的问题。现在如果我想在preUpdate中修改A :: $ bar,我将得到一个例外:

Field "foo" is not a valid field of the document "A" in PreUpdateEventArgs

抛出此异常是因为documentChangeSet的{​​{1}}不包含PreUpdateEventArgs

如何修改条形属性?

0 个答案:

没有答案