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

时间:2013-02-13 04:33:32

标签: php symfony doctrine-orm

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

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

/**
 * @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(),
    );
}

1 个答案:

答案 0 :(得分:1)

我必须有一个监听器或某个持久用户的东西。

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

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

直到我能发现听众或其他数据转换器造成这种情况。