【发布时间】:2014-02-05 13:21:30
【问题描述】:
基于问题和这个answer,我对事件preUpdate() 结合symfony 和教义的真正作用感到困惑。
确切地说,我的意思是上面答案中的这一行:
$event->setNewValue('password', $user->getPassword());
为什么我需要手动设置新值的额外步骤?
我认为学说处理事件并自行更新实体而无需调用例如flush?
支持抛出异常Field "password" is not a valid field of the entity "...\UserBundle\Entity\User" in PreUpdateEventArgs.
当我使用它时,我不明白为什么我需要手动修改实体。
有关异常的扩展信息:仅在用户登录时引发。在用户注册或编辑时不会引发。
【问题讨论】:
-
你在
...\UserBundle\Entity\User实体中真的有password属性吗?getPassword()和setPassword()方法? -
也许您对该字段使用了任何验证器?您设置的密码无效?请检查一下
-
是的@Victor 我检查了几次属性和方法。 ` ... /** * @ORM\Column(type="string", length=255) */ protected $password; ... ` 也没有验证器。
-
直接密码呢?尝试像
$event->setNewValue('password', 'qwerty123');一样直接传递它。有用吗? -
不,它也不起作用。但主要的问题是,为什么我仍然需要这个?可能是因为this 引发了异常,但我仍然不明白为什么我需要手动设置该值。 @维克多
标签: php symfony doctrine-orm