2017-06-09 58 views
3

我有3個表/實體。我試圖創建一種形式來將數據保存到所有3個表格中。實體需要很長時間,這就是爲什麼我沒有在這裏添加。Symfony嵌入表格集合多表

實體客戶端我在客戶端實體中爲其他2個實體創建了一個數組集合。

protected $Clientservice; 
    protected $Hostingaccount; 

    public function __construct() 
    { 
     $this->Clientservice = new ArrayCollection(); 
     $this->Hostingaccount= new ArrayCollection(); 
    } 
    public function getClientservice() 
    { 
     return $this->Clientservice; 
    } 
    public function getHostingaccount() 
{ 
    return $this->Hostingaccount; 
} 

    public function setClientservice($Clientservice) 
    { 
     $this->Clientservice = $Clientservice; 

     return $this; 
    } 
    public function setHostingaccount($Hostingaccount) 
    { 
     $this->Hostingaccount = $Hostingaccount; 

     return $this; 
    } 

而且我有3種形式:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('CustomerID',IntegerType::class) 
     ->add('Sex',TextType::class) 
     ->add('Name',TextType::class) 
     ->add('FirstName',TextType::class) 
     ->add('LastName',TextType::class) 
     ->add('Email', EmailType::class) 
     ->add('Invoiceemail', EmailType::class) 
     ->add('Iban', TextType::class) 
     ->add('Bic', TextType::class) 
     ->add('SEPAMandateID', TextType::class) 
     ->add('LogoUrl', TextType::class) 
     ->add('CreationDate', DateType::class) 
     ->add('Clientservice', CollectionType::class, array(
      'entry_type' => WhmAdminClientserviceType::class 
     )) 
     ->add('Hostingaccount', CollectionType::class, array(
      'entry_type' => WhmAdminHostingAccountType::class 
     )) 
     ->getForm(); 

} 

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => Client::class 
    )); 
} 

Clientservice形式

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('Description',TextType::class); 

} 

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => Clientservice::class 
    )); 
} 

Hostingaccount形式:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('Domain',TextType::class) 
     ->add('Domainip',IntegerType::class) 
     ->add('UserName',TextType::class) 
     ->add('Owner',TextType::class); 

} 

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => Hostingaccount::class 
    )); 
} 

在我的控制器我有這樣的代碼:

public function AddWhmAdminAction(Request $request) 
{ 

    $Client = new Client(); 

    $form = $this->createForm(WhmAdminType::class, $Client); 
    $form->add('submit', SubmitType::class, array(
     'label' => 'Create', 
     'attr' => array('class' => 'btn btn-default pull-left') 
    )); 
    $form->handleRequest($request); 
    if ($form->isSubmitted() && $form->isValid()) { 

     $em = $this->getDoctrine()->getManager(); 

     $em->persist($Client); 
     $em->flush(); 

     $this->get('session')->getFlashBag()->add('green', 'Product created!'); 
     return $this->redirectToRoute('whmAdmin'); 
     // flash msg 
    } 
    //return $form->createView(); 
    $build['form'] = $form->createView(); 
    return $this->render('whm/WhmAdminForm.html.twig', $build); 

} 

在我看來

{{ form_start(form) }} 

{% for flashMessage in app.session.flashbag.get('green') %} 

    {{ flashMessage }} 

{% endfor %} 


{{ form_end(form) }} 

我跟着http://symfony.com/doc/current/form/form_collections.html,這是多遠我得了。 我的表單只顯示來自客戶的字段。它不顯示來自Clientservice和hostingaccount的字段。如何以客戶端的相同形式顯示clientservice和hostingaccount中的字段。

回答

2

如果ClientserviceHostingaccount在OneToOne或多對一的關係,然後改變:

->add('Clientservice', CollectionType::class, array(
    'entry_type' => WhmAdminClientserviceType::class 
)) 
->add('Hostingaccount', CollectionType::class, array(
    'entry_type' => WhmAdminHostingAccountType::class 
)) 

到:

->add('Clientservice', WhmAdminClientserviceType::class) 
->add('Hostingaccount', WhmAdminHostingAccountType::class) 

否則留下您的形式建設者和閱讀集合類型有關adding and removing items

+0

它給了我這個錯誤窗體的視圖數據應該是類AppBundle \ Entity \ Clientservice的一個實例,但是類Doctrine \ Common \ Collections \ ArrayCollection的一個實例。您可以通過將「data_class」選項設置爲null或通過添加將Doctrine \ Common \ Collections \ ArrayCollection類的實例轉換爲AppBundle \ Entity \ Clientservice實例的視圖轉換器來避免此錯誤。但是當我將「data_class」更改爲null時,它會顯示其他字段。當我堅持數據它只保留數據到客戶端而不是clientservice en hostingaccount – user8124685

+0

客戶服務和Hostingaccount與客戶的ManyToOne關係? – miikes

+0

我有這樣/ ** * @ORM \ ManyToMany(targetEntity =「AppBundle \ Entity \ Clientservice」,cascade = {「persist」}) */ protected $ Clientservice; /** * @ORM \ ManyToMany(targetEntity =「AppBundle \ Entity \ Hostingaccount」,cascade = {「persist」}) */ protected $ Hostingaccount;在客戶端實體 – user8124685