2017-05-27 104 views
0

有點熟悉symfony,直到我發現自己處於這個過程中。2個實體1個形式Symfony 3

我有兩個實體:用戶和帳戶。

每個用戶都有一系列的賬戶,比如google賬戶,facebook賬戶等。用戶位於一個表中,帳戶位於不同的表中。顯然,帳戶是根據用戶的ID獲取的。

如何將兩個實體合併爲一個表單,以便我可以獲取,創建,編輯和/或刪除條目?

我的用戶實體:

use statements here 
... 
private $id; 
private $fullname; 
private $accounts; 

public function __construct(){ 
$this->accounts = new ArrayCollection(); 
}  
//setters and getters... 

我的賬戶實體:

use statements here 
... 
private $id; 
private $user_id; //id in user entity 
private $service; //i.e google account 
private $username; 
private $password; 

//setters and getters... 

我的用戶表單:

class UserType extends AbstractType 
{ 

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
... 
    $builder 
     ->add('id',HiddenType::class) 
     ->add('FullName',TextType::class) 
     ->add('accounts'.,CollectionType::class,[ 
      'entry_type' => AccountType::class 
     ]) 
... 
public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'AppBundle\Entity\User' 
    )); 
} 

個賬戶形成:

class AccountType extends AbstractType 
{ 

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
... 
    $builder 
     ->add('id',HiddenType::class) 
     ->add('accountname',TextType::class) //i.e Google Account 
     ->add('username',TextType::class) 
     ->add('password',TextType::class) 
... 
public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'AppBundle\Entity\Account' 
    )); 
} 

我的控制器:

...  
@Route("https://stackoverflow.com/users/{id}/edit") 
... 
public function EditAction(Request $request, User $user){ 
... 
$form = $this->createForm(UserType::class, $user); 
$form->handleRequest($request); 
... 
... 
return $this->render("/pages/users/edit.html.twig", 
    ["form"=>$form->createView()] 
); 

完全沒有錯誤,但形式不顯示任何的帳戶實體的字段。

i,e,. {{ form_row(accounts.username) }} 

任何想法或幫助或指向我正確的方向將受到高度讚賞。

+0

' - > add('accounts'.CollectionType :: class')有一個點,並且在第三個參數之前錯過了一個逗號 –

+0

您的用戶當前是否有任何帳戶?需要至少一個 – Cerad

+0

是的,這兩個表格中都有賬戶和/或數據 – iVoidWarranties

回答

0

你需要調用一個形式另一個表單中像這樣調用它的類型:

$builder 
    ->add('id',HiddenType::class) 
    ->add('FullName',TextType::class) 
    ->add('accounts', 'collection', array(
      'type' => new AccountType(), 
      'allow_add' => true,)) 
+0

這會觸發錯誤。這很可能會工作在symfony 2.x – iVoidWarranties

+0

哪個錯誤?你可以請張貼嗎? –

+0

'無法加載類型「集合」 500內部服務器錯誤 - InvalidArgumentException' – iVoidWarranties

0

答案其實很簡單。我所需要的只是將適當的註釋添加到$ accounts屬性中。

/** 
* @ORM\ManyToMany(targetEntity="Account") 
* 
private $accounts; 

感謝您的所有輸入。整個腳本現在正在工作