2017-11-07 6 views
0

私は理解していない狂った問題があります。懸念しているSymfony2フォームからエンティティを格納すると動作しません

私のコードは以下のようになります。私は、エンティティと2つの形式がinludesし、それをレンダリングするフォームを作成

public function appendAction(Request $request, $pKpPatientid) 
{ 
    if (!$this->isAdmin()) { 
     throw new AccessDeniedException(); 
    } 
    $entity = new DataDFu1(); 
    $entity1 = $this->getDoctrine() 
     ->getRepository('DataLiveBundle:DataAPatient') 
     ->find($pKpPatientid); 

    $appendForm = $this->createAppendForm($pKpPatientid,$entity, $entity1); 


    $appendForm->handleRequest($request); 
    // if ($appendForm->isValid()) { 
     if($appendForm->get('submit')->isClicked()){//Save 
      //return $this->redirect($this->generateUrl('dataapatient_sendMessage', array("pKpPatientid" => $pKpPatientid))); 
      $entity->setFu1KfPatientid($entity1); 
      $this->storeAppendDataDFu1($entity); 

    // } 
    } 

    return $this->render('DataLiveBundle:DataDFu1:form.html.twig', array(
     // 'entity'  => $entity, 
     'form' => $appendForm->createView(), 
     'isNew'=> true, 
    )); 
} 

/** 
* The function createAppendForm 
* Creates a form with the Information from a DataAPatient. 
* @param DataAPatient $pKpPatientid The primary key 
* @return \Symfony\Component\Form\Form 
*/ 
private function createAppendForm($pKpPatientid, $entity, $entity1) 
{ 

    $form = $this->createForm($this->get('data_livebundle.form.dataapatienttype'), $entity1, array(
    //'action' => $this->generateUrl('dataHome'), 
    'method' => 'POST' 
    )); 

    $form->add('submit', 'submit', array('label' => 'Create Fu1')); 
    return $form->add('dFu1', new DataDFu1Type(), array('data'=>$entity)); 

} 

/** 
* The function storeEditedDataDFu1 
* Persists changes made to an existing DataDFu1 entity to the database 
* @param DataDFu1 entity 
* @return DataAPatient $pKpPatientid The primary key 
*/ 
public function storeAppendDataDFu1($entity) 
{ 
    $em = $this->getDoctrine()->getManager(); 
    $session = $this->getRequest()->getSession(); 

    if (!$entity) { 
     throw $this->createNotFoundException('Unable to find DataDFu1 entity.'); 
    } 

    $em->persist($entity); 
    $em->flush(); 
    $session->getFlashBag()->add(
      'notice', 
      'Your changes to the DataDFu1 of ID: "'."xyz". '" was saved!' 
    ); 
    // return $entity->getPKpPatientid(); 
} 

。それは罰金を働かせます。しかし、現時点では、エンティティからのデータをstore(storeAppendDataDFu1)したい場合はからこのエンティティだけエンティティ1は以前にフォームで視覚化された(すべて可視化された)すべての値を失います。つまり、このentity1によって表示されるフィールドは、データベースに値NULLで永続的に格納されます。

エンティティ1に1つのメモリ機能しかプログラムされていないのに、エンティティ1が間違った値を永続的に格納する方法を教えてください。

私は、Submitを押すたびにentity1のフィールドがNULLに設定されているので、フォームのコンステレーションと関係があると言います。

誰かがこの問題を知りたいと思っています:)私は本当に解決策を見つけることができません。 *エンティティからのforeigキーがentity1のプライマリキーであるため、oneToOneと一致するため、エンティティとエンティティ1は接続されたばかりです...

私はmappingBy nullも見つかりましたか?それはどういう意味ですか?それは理由だろうか?

oneToOne: 
    fu1KfPatientid: 
     targetEntity: DataAPatient 
     cascade: { } 
     fetch: LAZY 
     mappedBy: null 
     inversedBy: dFu1 
     joinColumns: 
      _FU1_kf_PatientID: 
       referencedColumnName: __P_kp_PatientID 
     orphanRemoval: false 

フィードバックに感謝...エンティティが関連している場合は、より多くのinformation..Thaanks

答えて

0

今問題が見つかりました。問題は、私は登録レイアウトを作成するために Data-Toggle

{#<div class="container"> 
<div class="row"> 
    <ul class="nav nav-tabs pull-left"> 
     <li class="active"><a href="#patientInfo" data-toggle="tab">Patient info</a></li> 
     <li ><a href="#partI" data-toggle="tab">Part I</a></li> 
     <li ><a href="#partII" data-toggle="tab">Part II</a></li> 
     <li ><a href="#partIII" data-toggle="tab">Part III</a></li> 
    </ul> 
    {#div class="clearfix">tmp. disable#}</div> #} 

を使用しているということです。私はこの種のレイアウトはSimfony2フォームでうまく動作しないと思います。 Symfony2フォームで登録レイアウトを使用する経験がありますか?

0

が必要な場合は、両方のエンティティを永続化するために、適切なマッピング情報を追加するために、より良いではない私に教えて?フォームで

エンティティ1

/** 
*@ORM\OneToOne(targetEntity="Entity2", cascade={"persist"}) 
* 
*/ 
$entity_two_reference; 

これは、それが正常に動作する必要があります)Entity2Typeだろうとあなたが(フラッシュを作る際に、通常

としてレンダリングする必要があります。

+0

ええと。私が2つの異なるエンティティでそれを行うことを計画している理由は、最初のエンティティを変更してはならないからです。しかし、適切な情報を定義する必要がある場合は、 istは2つの異なるformtypeで動作しますか?今私はすべてのエンティティに独自のフォームタイプを持っています – helmi

+0

私はすでにマッピング情報を持っていると思いますので、最初のエンティティまたは他のエンティティで何も変更しないでください。必須エンティティの形式を変更し、フィールドのEntityTwoFormTypeを変更するだけで、追加のコードなしでレンダリングおよび永続化されます。 自分のエンティティを表示することができますので、自分の自己をよりよく説明できますか? –

+0

フィードバックのお寄せいただきありがとうございます。どのファイルにエンティティクラス、またはエンティティフォームが必要ですか?または両方? – helmi

関連する問題