3

フォームが有効でない場合でも、関連付けられたエンティティを保持するフォーム タイプがあるという問題があります。$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(),
    );
}
4

1 に答える 1

1

ユーザーを永続化するリスナーまたは何かが必要です。

これを一時的に回避するには、次のことを行います。

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

どのリスナーまたは他のデータトランスフォーマーがこれを引き起こしているかを突き止めることができるまで。

于 2013-02-15T19:21:36.663 に答える