2011-12-13 19 views
0

チャレンジコントローラの "新しいアクション"にこのコードがあります。チャレンジフォームを提出すると「フィールドplayer_oneは存在しません」というエラーが表示されます。"フィールドは存在しません" - フォーム送信時のエラー

if ($form->isValid()) 
{  
    foreach($form->get('teams') as $team_form) 
    { 
     $player_one = $team_form->get('player_one')->getData(); 
     $player_two = $team_form->get('player_two')->getData(); 

     $user_one = $this->getDoctrine()->getRepository('TennisconnectUserBundle:User')->findOneByUsername($player_one); 
     $user_two = $this->getDoctrine()->getRepository('TennisconnectUserBundle:User')->findOneByUsername($player_two); 

     // Add user(s) to the two teams 
     foreach($challenge->getTeams() as $i => $team) 
     { 
      // First team 
      if($i == 0) 
      { 
       if($user_one) 
       { 
        $team->addUser($user_one);         
       } elseif($user_two) 
       { 
        $team->addUser($user_two); 
       } 
      } 
      // Second team 
      elseif($i == 1) 
      { 
       if($user_one) 
       { 
        $team->addUser($user_one);         
       } elseif($user_two) 
       { 
        $team->addUser($user_two); 
       } 
      } 
     } 
    } 

    $em = $this->getDoctrine()->getEntityManager(); 
    $em->persist($challenge); 
    $em->flush();    

    return $this->render('TennisconnectDashboardBundle:Default:index.html.twig', array('form' => $form->createView(), 'user' => $user)); 
} 

しかし、私は "$のplayer_one" をデバッグするとき、それは私にテキストボックスから正しい値を与える:

$player_one = $team_form->get('player_one')->getData(); 
die($player_one); 
+0

コードのようにCSRFトークンを削除する必要がありました。あなたが投稿したコードは、フォームの検証が成功した場合に実行されます。フォームのisValid()メソッド内で何が起こっているのかを確認する必要があります。前記フォームを介して提出されたサンプル$ _POSTデータも同様です。 –

+0

私は 'if(isValid())'の中に 'die( "test")と入力してフォームを送信すると、それが死んで "test"というメッセージが表示されるので、 – mattyh88

答えて

0

は、問題を発見しました。 私がこれをしたとき、チャレンジフォームに2つのチームフォームしか追加していなかったので、結果として3つの結果が得られました。

die(count($form->get('teams'))); 

は、私はあなたが求めている問題に関連していないようだ投稿この

$form->get('teams')->remove('_token'); 
関連する問題