0

当我尝试在 Doctrine 事件侦听器中为之前未更改的属性设置新值时,我遇到了由PreUpdateEventArgs::assertValidField. 它说我无法更改在事件触发之前未更改的属性。

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

UPD

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

当我更改其中一个文件时,会触发 preUpdate 事件。例如,我更改了 $foo 属性。现在要修改它,我必须按照此处$event->setNewValue的说明使用。例子:

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

抛出此异常是因为documentChangeSetcontains PreUpdateEventArgsno bar

那我该如何修改 bar 属性呢?

4

0 回答 0