Я пытаюсь сменить пароль пользователя. Пользователь выбирается из выпадающего списка.
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('password', PasswordType::class, array('label' => 'Password'))
->add('reset', SubmitType::class, array('label' => 'Reset'))
->add('username', EntityType::class, array('class' => User::class,
'query_builder' => function (EntityRepository $er) {return $er->createQueryBuilder('u')->orderBy('u.username', 'ASC');
},'choice_label'=>'username', 'label'=>'User'));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array('data_class' => User::class));
}
Когда форма впервые отображается, я вижу список пользователей. Затем я заполняю новый пароль и отправляю. И тогда я получаю сообщение об ошибке: «Ожидаемый аргумент типа« строка »,« объект », указанный в имени пользователя и пути к свойству». Ошибка происходит в контроллере в строке
$ form-> handleRequest ($ request);
Это контроллер:
$form = $this->createForm(ResetPwdType::class, new User());
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$u = $form->get('username')->getData();
$user = $this->getDoctrine()->getManager()->getRepository(User::class)->findOneBy(['username' => $u->getUsername()]);
$newPwd = $passwordEncoder->encodePassword($user, $form->get('password')->getData());
$user->setPassword($newPwd);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($user);
$entityManager->flush();
$this->addFlash('success', 'Password reset!');
$params = null;
return $this->redirectToRoute('reset_pwd');
}
return $this->render(
'security/resetpwd.html.twig',array('form' => $form->createView()));
Я думаю, что есть свойство, которое должно быть строкой вместо объекта. И это как-то связано со свойством username. Я попытался добавить метод toString для объекта пользователя без успеха. Что я должен изменить, чтобы получить ошибку и сохранить новый пароль в БД.