2016-09-10 5 views
1

私はネストされた形態symfonyのフォームの継承:プロパティいずれも方法の一つは

demand 
    home 
     child 
     godfather 

demandを有して存在するが親であり、childfather埋め込むhome(2最終形態が同じレベルにある)を埋め込みますDemandeType

私が持っている:で

  $builder 
      ->add('date', 'datetype') 
      ->add('name', 'text') 
      //... 

      ->add('home', 'home', array(
      'mapped' => false, 
      'data_class' => 'AppBundle\Entity\Home', 
      'inherit_data' => true 
      )) 

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'AppBundle\Entity\Demand', 
    )); 
} 

210:

  $builder 
      ->add('address', 'textarea') 
      //... 

      ->add('child', 'child', array(
      'mapped' => false, 
      'data_class' => 'AppBundle\Entity\Child', 
      'inherit_data' => true 
      )) 

      ->add('godfather', 'godfather', array(
      'mapped' => false, 
      'data_class' => 'AppBundle\Entity\Godfather', 
      'inherit_data' => true 
      )) 

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'AppBundle\Entity\Home', 
    )); 
} 

そしてChildTypeGodfatherTypeに、私は彼らの権利data_classと姓firstnameのための唯一のテキストフィールドを、持っています。

しかし、私は、フォーム(DemandType、wichh埋め込み、すべてのサブフォーム)を提出するとき、私はこのエラーを得た:

プロパティ「アドレス」も方法の一つ「のgetAddress()」、「アドレス()どちら"、" isAddress() "、" hasAddress() "、" __get() "が存在し、" AppBundle \ Entity \ Demand "クラスでパブリックアクセスを持っています。

これらの方法は、Demandエンティティではなく、Homeエンティティに属します。私はinherit_dataを入れました。何が欠けていますか?

おかげ

答えて

1

あなたがinherit_dataを使用しているためです。このプロパティは、デフォルトで発生する単一のプロパティ(またはゲッター関数からのもの)ではなく、送信されたデータ全体をフォームに渡します。

あなたはhomeフォームタイプは、インスタンスDemandエンティティを受けだから、なぜだdemandhomeの両方のためにこれを行います。だから私は、あなたがhomeからinherit_dataを削除し、ちょうど使用したいと思います:

->add('home', 'home', array(
    'mapped' => false, 
    'data_class' => 'AppBundle\Entity\Home', 
)) 

この場合homeHoneエンティティである必要があり$demand->getHome()からのデータを受信します。

実際にinherit_dataを使用する必要はありませんが、使用例によって異なります。

/** @ORM\Entity() */ 
class Demand { 
    /** @ORM\OneToWhatever() */ 
    private $home; 
    public function getHome() { 
     return $this->home; 
    } 
} 

/** @ORM\Entity() */ 
class Home { 
    /** @ORM\OneToWhatever() */ 
    private $child; 
    public function getChild() { 
     return $this->child; 
    } 
} 

/** @ORM\Entity() */ 
class Child { ... } 

しかし、私はそれを助けるのは難しいまさにあなたのデータ構造がそうであるかわからない:次のようなエンティティの構造を持っているので、通常、あなたがそれを必要としません。

また、mapped => falseを使用しています。これは、Symfonyがフォームデータでエンティティを更新するのを防ぐため、あなたが望むものではないかどうかわかりません。

参照してください:

関連する問題