Forms 提交的Symfony表单返回错误的字段值

Forms 提交的Symfony表单返回错误的字段值,forms,symfony4,Forms,Symfony4,我正在用Symfony 4表单做一些测试,我的问题的答案可能很简单,但我现在真的很困惑,我需要新的眼光来理解以下奇怪的行为。 这里是上下文:我有一个页面/edit,它以一种非常经典的方式处理名为Promotor的实体的表单,但在通过验证后,我生成并设置一个randon firstname,然后刷新该实体(该实体使用新的数据表单、表单和新的firstname进行更新),在没有重定向到另一个页面之后,我返回到与新的发起人实体相同的页面 我的期望是看到新生成的firstname,但实际上它显示了旧的f

我正在用
Symfony 4
表单做一些测试,我的问题的答案可能很简单,但我现在真的很困惑,我需要新的眼光来理解以下奇怪的行为。 这里是上下文:我有一个页面
/edit
,它以一种非常经典的方式处理名为
Promotor
的实体的表单,但在通过验证后,我生成并设置一个randon firstname,然后刷新该实体(该实体使用新的数据表单、表单和新的firstname进行更新),在没有重定向到另一个页面之后,我返回到与新的
发起人
实体相同的页面

我的期望是看到新生成的firstname,但实际上它显示了旧的firstname(通过表单发送给控制器的firstname),我不明白为什么?有人能提供线索吗

我应该补充的是,数据库中的数据已正确更新

控制器代码为:

/**
     * @Route("/{id}/edit", name="promoter_edit", methods={"GET","POST"})
     * @param Request $request
     * @param Promoter $promoter
     * @return Response
     */
    public function editAction(Request $request, Promoter $promoter): Response
    {
        $form = $this->createForm(PromoterFormType::class, $promoter);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $firstname = substr(str_shuffle('abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ'),0,5);
            $promoter->setFirstname( $firstname );
            $this->getDoctrine()->getManager()->persist($promoter);
            $this->getDoctrine()->getManager()->flush();
        }

        return $this->render('promoter/edit.html.twig', [
            'promoter' => $promoter,
            'form' => $form->createView(),
        ]);
    }

谢谢

在我看来,当你发布你的表单时,你在更新你的“推广人”之前创建了一个新的表单。您应该在提交表单后尝试重新加载页面

if ($form->isSubmitted() && $form->isValid()) {
    $firstname = substr(str_shuffle('abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ'),0,5);
    $promoter->setFirstname( $firstname );
    $this->getDoctrine()->getManager()->persist($promoter);
    $this->getDoctrine()->getManager()->flush();

    return $this->redirect($request->getUri());
}

PromoterFormType类是否有firstname字段?因为否则它会覆盖你新设置的名字

如果是,请修复: 在PromoterFormType中

->add('firstname')
需要选项:“映射”=>false。 或者简单地从表单类型中删除它

如果没有,你能给我们看一下表单类型和发起人实体吗? 希望这对你有帮助