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



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

我的期望是看到新生成的名字,但实际上它显示了旧的名字(表单发送给控制器的名字(,我不明白为什么?有人能知道吗?

我应该补充一点,db 中的数据已正确更新。

控制器代码为:

/**
* @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 类是否有名字字段?因为否则它可能会覆盖您新设置的名字。

如果是这样,请修复: 在 PromoterFormType 中

->add('firstname')

需要选项:"映射" => false。 或者简单地从表单类型中删除它。

更多信息

如果没有,你能向我们展示表单类型和发起人实体吗? 希望这对您有所帮助!

最新更新