将实体绑定到只允许具有标识符的实体使用的查询参数



我正在使用Symfony 4项目,我想更改用户密码,所以我在我的存储库中创建了一个方法,并将其调用到控制器,但这个错误一直困扰着我,

Binding entities to query parameters only allowed for entities that have an identifier.

存储库

public function updateU($password,$email): ?Utilisateur
{
$dql = <<<DQL
SELECT u
FROM AppEntityUtilisateur u
WHERE u.email = :email
AND u.password = :password
DQL;
return  $this->getEntityManager()->createQuery($dql)
->setParameters(['email' => $email, 'password' => $password])
->getSingleScalarResult();

}控制器

/**
* @Route("/Reset", name="Reset")
* Method({"GET"})
*/
public function New(
Request $request,
UtilisateurRepository $URe,
UserPasswordEncoderInterface $userPasswordEncoder,
EntityManagerInterface $entityManager,
MailerInterface $mailer
) {
$o = '';
$Varmail = $_GET['email'];
$user = new Utilisateur($o);
$form = $this->createFormBuilder($user)
->add('password', PasswordType::class)
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$to = $Varmail;
$sujet = 'Password Changed';
$Message = "Bonjour $Varmail Votre email est changé !";
$pass = $user->setPassword(
$userPasswordEncoder->encodePassword(
$user,
$form->get('password')->getData()
)
);
$URe->updateU($pass, $Varmail);
$Mai = new MailerController();
$Mai->sendEmail($mailer, $to, $sujet, $Message);
}
return $this->render('modifier_mdp/index.html.twig', [
'form' => $form->createView(),
]);
}

我该怎么解决,谢谢

updateU方法中,您正在请求获取数据,而不是更新数据。最好使用ObjectManager来保存数据,因为在$user变量中仍然有一个更新的Utilisateur对象实例。

$user = $this->getDoctrine()->getManager()->getRepository(Event::class)->findOneBy(['email'=>$Varmail]);
$form = $this->createFormBuilder($user)->add('password', PasswordType::class)->getForm();
if ($form->isSubmitted() && $form->isValid()) {
// ...

$user->setPassword(
$userPasswordEncoder->encodePassword(
$user,
$form->get('password')->getData()
)
); 

// save Utilisateur with new password
$em = $this->getDoctrine()->getManager();
$em->persist($user);
$em->flush();
}

最新更新