2016-12-06 25 views
1

所以我有OneToMany兩個實體之間的關係,我已經創建了相關的表單,但似乎FormBuilder發送數據後,沒有看到實體。
父類:Symfony:表單生成器沒有得到OneToMany輸入

class Parent{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 

    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=255) 
    */ 
    private $name; 

    /** 
    * @ORM\OneToMany(targetEntity="Child",mappedBy="parent",cascade={"persist", "remove"}) 
    * @ORM\JoinColumn(nullable=false) 
    */ 
    private $children; 
} 

子類:

class Child{ 
    /** 
     * @var int 
     * 
     * @ORM\Column(name="id", type="integer") 
     * @ORM\Id 
     * @ORM\GeneratedValue(strategy="AUTO") 
     */ 
    private $id; 
    /** 
     * @var string 
     * 
     * @ORM\Column(name="name", type="string", length=255) 
     */ 
    private $name; 
    /** 
    * @ORM\ManyToOne(targetEntity="Parent", inversedBy="children") 
    */ 
    private $parent; 
} 

這是FormTypes:

class ParentType extends AbstractType 
{ 
    /** 
    * {@inheritdoc} 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('name') 
      ->add('children', CollectionType::class, array(
      'entry_type' => ChildType::class, 
      'allow_add' => true 

     )); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'Bundle\Entity\Parent' 
     )); 
    } 

} 

兒童FormType:

class ChildType extends AbstractType 
{ 
    /** 
    * {@inheritdoc} 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('name'); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'Bundle\Entity\Child' 
     )); 
    } 
} 

之後,我創建了我的形式在控制器內是這樣的:

function saveAction(Request $request){ 
    $parent = new Parent(); 
    $form = $this->createForm('Bundle\Form\ParentType', $parent); 
    $form->handleRequest($request); 
    if ($form->isSubmitted()) { 
      //--after submitted the form I just want to display the children 
      die(var_dump($parent->getChildren())); 


     } 
} 

當然我創建使用由symfony中的FormBuilder提供的數據原型的jQuery的兒童中,但形式沒有看到他們!
我在這裏錯過了什麼?

+0

您可以使用'query_builder'屬性,如下所示:[在symfony中具有嵌入式關聯實體的完整webform樣式CRUD示例](http://www.inanzzz.com/index.php/post/djrc/full-webform -style-crud-example-with-an-embedded-associated-entity-in-symfony) – BentCoder

回答

0

這可能是因爲你的'setter'沒有被調用。

嘗試增加by_reference,它這樣設置爲false

class ParentType extends AbstractType 
{ 
    /** 
    * {@inheritdoc} 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('name') 
      ->add('children', CollectionType::class, array(
      'entry_type' => ChildType::class, 
      'allow_add' => true, 
      'by_reference' => false 

     )); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'Bundle\Entity\Parent' 
     )); 
    } 

} 

我沒有時間來實際測試你的代碼。但是,您不必在表單中輸入parent。所以你的孩子formType應該看起來像這樣:

class ChildType extends AbstractType 
{ 
    /** 
    * {@inheritdoc} 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('name')  ; 

    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'Bundle\Entity\Child' 
     )); 
    } 
} 

希望它有幫助。

+0

是的,你是正確的將父母放在子formtype中,但將「by_reference」設置爲false仍然不起作用。 –