1

ユーザーのパスワードを変更しようとしています。ユーザーがドロップダウンリストで選択されます。

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()));

オブジェクトではなく文字列である必要があるプロパティがあると思います。そして、それはユーザー名プロパティと関係があります。User Entity に toString メソッドを追加しようとしましたが、成功しませんでした。エラーを解消し、新しいパスワードをデータベースに保存するには、何を変更する必要がありますか。

4

0 に答える 0