gpt4 book ai didi

php - 即使表单有错误,实体仍然存在

转载 作者:搜寻专家 更新时间:2023-10-31 21:37:55 25 4
gpt4 key购买 nike

我有一个问题,我的表单类型即使在表单无效时也会保留关联的实体。我已经通过 $form->getErrorsAsString() 确认表单确实有错误。我还确认了检查表单是否有效的逻辑 if 语句是错误的。尽管表单永远无效,实体仍然存在。

我不确定我在这里做错了什么,因为我没有其他地方可以找到持久化实体或刷新实体管理器。这是我的 Controller :

/**
* @Route("/settings/profile", name="settings_profile")
* @Template();
*/
public function profileAction()
{
$user = $this->getUser();
$profile = $user->getUserProfile();

if (null === $profile) {
$profile = new UserProfile();
$profile->setUser($user);
$profileDataModel = $profile;
} else {
$profileDataModel = $this->getDoctrine()->getManager()->find('MyAppBundle:UserProfile',$profile->getId());
}

$form = $this->createForm(new ProfileType(),$profileDataModel);
$request = $this->getRequest();

if ($request->getMethod() === 'POST') {
$form->bind($request);

if ($form->isValid()) {
// This logic never gets executed!
$em = $this->getDoctrine()->getManager();
$profile = $form->getData();
$em->persist($profile);
$em->flush();
$this->get('session')->setFlash('profile_saved', 'Your profile was saved.');
return $this->redirect($this->generateUrl('settings_profile'));
}
}

return array(
'form' => $form->createView(),
);
}

最佳答案

我必须在某处有一个监听器或其他东西来保持用户。

我临时解决这个问题的方法是:

$em = $this->getDoctrine()->getManager()
if ($form->isValid()) {
// persist
} else {
$em->clear();
}

直到我能查出是什么监听器或其他数据转换器导致了这种情况。

关于php - 即使表单有错误,实体仍然存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14846431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com