2017-08-15 11 views
0

whileループを使用してsymfonyでフォームをループする際に問題が発生しました。ユーザーが1つの学生期間を入力し、それが登録と一致すると、フォームを再度入力して2番目の学生期間と3番目の学生期間を入力させます。私はそれを正しくやっていない、または私はエンティティ=新しい学生();それらが2つのエンティティに入るようにします。symfonyでフォーム/新しいエンティティをループする方法

public function createAction(Request $request){ 
    $entity = new Student(); 
    $form = $this->createCreateForm($entity); 
    $form->handleRequest($request); 

    if ($form->isSubmitted() && $form->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 
     $student = $em->getRepository('AcmeDemoBundle:Payrollperiod') 
        ->findOneBy([ 
         'begindate'=>$form->get('beginDate')->getData(), 
         'lastdate'=>$form->get('lastDate')->getData() 
        ]); 

     $registration = $em->getRepository('AcmeDemoBundle:Payrollweek') 
        ->findBystartdateAndenddate(
         $form->get('beginDate')->getData(), 
         $form->get('lastDate')->getData() 
        ); 

     $counter = count($registration); 

     while($counter<=2) { 
      if ($student){ 
        $this->addFlash('error', 'Duplicate error: Student Period already existed.'); 
        return $this->redirect($this->generateUrl('student')); 
      } 
      elseif ($registration){ 
       foreach ($registration as $reg) { 
        $reg->setStudentid($entity); 
       } 
       $em->persist($entity); 
       $em->flush(); 

       return $this->redirect($this->generateUrl('payrollperiod')); 
      } 
      else{ 
       $this->addFlash('error', ' does not match .'); 
       return $this->redirect($this->generateUrl('student')); 
      } 
     } 

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

    } 
} 
+0

私はあなたのデザインにいくつかの問題があると思っています。それはあなたが期待していることをするつもりはないと思います。 –

+0

合意。これはウェブリクエストの仕組みではありません –

答えて

0

フィールドを追加する場合はhttp://symfony.com/doc/current/reference/forms/types/form.html#allow-extra-fieldsのドキュメントをお読みください。ユーザーが2番目以上の期間を追加する必要がある場合、UI /フロントエンドはより多くのフィールドを作成する必要があります。私は適切なSymfonyフォーム要素を生成する必要があります。投稿すると、標準フォームのポストのように扱うことができます。期間は配列として送信されるため、リクエストを反復処理します。

私はこれまで、フォームの入力フィールドを記述したテンプレートへのAJAX呼び出しを新しいフォーム行に追加しました.Javascript/jQueryでフォームHTMLを作成する必要はありませんでした。 .append()テンプレートの結果はform - postになり、リクエストを処理します。

関連する問題