フォームが有効でない場合でも、関連付けられたエンティティを保持するフォーム タイプがあるという問題があります。$form->getErrorsAsString() を介してフォームに実際にエラーがあることを確認しました。また、フォームが有効かどうかをチェックする論理if文がfalseになることも確認しています。フォームが決して有効ではないにもかかわらず、エンティティは存続します。
エンティティを永続化するか、エンティティ マネージャをフラッシュする場所が他にないため、ここで何が間違っているのかわかりません。これが私のコントローラーです:
/**
* @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(),
);
}