Symfony2 'preUpdate'密码编码事件的学说



基于问题和这个答案,我同意事件preUpdate()与Symfony和Doctrine的结合在一起。

准确地说,我的意思是上面答案中的这一行:

$event->setNewValue('password', $user->getPassword());

为什么我需要手动设置新值的额外步骤?
我认为学说可以处理事件并自行更新实体,而无需呼吁flush

支持抛出的例外
Field "password" is not a valid field of the entity "...UserBundleEntityUser" in PreUpdateEventArgs.
当我使用它时,我不明白为什么我需要手动修改实体。

有关例外的扩展信息:仅在用户登录时才会抛出。当用户注册或编辑用户时。

setNewValue()方法可用于更改已标记为更新的字段的值。如果出于某种原因,您要更新的字段尚未更改。

,它行不通。

通常,将密码设置为null足以将其添加到更改中。如果不是,您可以请求工作单位重新计算更改。

例如:

<?php
if ($event->hasChangedField('password')) {
    $event->setNewValue('password', $newPassword);
}
else {
    $em = $event->getEntityManager();
    $uow = $em->getUnitOfWork();
    $uow->recomputeSingleEntityChangeSet(
        $em->getClassMetadata(User::class),
        $entity
    );
}

相关内容

  • 没有找到相关文章

最新更新