Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony2学说';预更新';事件对密码进行编码_Php_Symfony_Doctrine Orm - Fatal编程技术网

Php Symfony2学说';预更新';事件对密码进行编码

Php Symfony2学说';预更新';事件对密码进行编码,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,基于这个问题,我混淆了事件preUpdate()与symfony和条令的结合到底起到了什么作用 确切地说,我指的是上面答案中的这一行: $event->setNewValue('password',$user->getPassword()) 为什么我需要手动设置新值的额外步骤? 我认为条令可以自行处理事件并更新实体,而无需调用例如flush 支持抛出的异常 字段“password”不是PreUpdateEventArgs中实体“…\UserBundle\entity\User”的有效字段。 当我

基于这个问题,我混淆了事件
preUpdate()
与symfony和条令的结合到底起到了什么作用

确切地说,我指的是上面答案中的这一行:

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

为什么我需要手动设置新值的额外步骤?
我认为条令可以自行处理事件并更新实体,而无需调用例如
flush

支持抛出的异常
字段“password”不是PreUpdateEventArgs中实体“…\UserBundle\entity\User”的有效字段。

当我使用它时,我不明白为什么我需要手动修改实体

有关异常的扩展信息:仅当用户登录时才会引发该异常。注册或编辑用户时不需要。

可以使用
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
    );
}

您是否在
..\UserBundle\Entity\User
实体中使用
getPassword()
setPassword()
方法确实具有
password
属性?可能您对该字段使用了任何验证器?你设置的密码无效吗?检查这个,PleaseEyes@Victor我检查了好几次属性和方法@ORM\Column(type=“string”,length=255)*/protected$password;…`也没有验证程序。直接密码呢?尝试直接传递它,如
$event->setNewValue('password','qwerty123')。它有效吗?不,它也无效。但主要的问题是,我为什么需要这个?可能是因为引发了异常,但我仍然不明白为什么需要手动设置该值@胜利者