2017-05-27 81 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; 

感谢您的所有输入。整个脚本现在正在工作