Php 生成具有一对多对一实体的symfony2表单

Php 生成具有一对多对一实体的symfony2表单,php,forms,symfony,doctrine-orm,Php,Forms,Symfony,Doctrine Orm,我正在为一张symfony2表格而挣扎。基本上,我想管理用户的偏好,以接收(或不接收)用户可以做的每种类型的行动电子邮件 这里是我的模式: 用户(扩展FOSUB) EmailUserPreference 类EmailUserPreference{ 公共函数构造(用户$User,\Adibox\Bundle\ActionBundle\Entity\ActionType$ActionType){ $this->user=$user; $this->actionType=$actionType; $t

我正在为一张symfony2表格而挣扎。基本上,我想管理用户的偏好,以接收(或不接收)用户可以做的每种类型的行动电子邮件

这里是我的模式: 用户(扩展FOSUB)

EmailUserPreference

类EmailUserPreference{
公共函数构造(用户$User,\Adibox\Bundle\ActionBundle\Entity\ActionType$ActionType){
$this->user=$user;
$this->actionType=$actionType;
$this->activated=true;
}
/**
*@ORM\Id
*@ORM\Column(type=“integer”)
*@ORM\GeneratedValue(strategy=“AUTO”)
*/
受保护的$id;
/**
*@ORM\ManyToOne(targetEntity=“Adibox\Bundle\UserBundle\Entity\User”,inversedBy=“id”)
*/
私人用户;
/**
*@ORM\manytone(targetEntity=“Adibox\Bundle\ActionBundle\Entity\ActionType”,inversedBy=“id”)
*/
私有类型;
/**
*@ORM\Column已激活(type=“boolean”)
*/
启动私人帐户;
/*接受者/接受者*/
}
动作类型

类操作类型
{
/**
*@var整数$id
*
*@ORM\Column(name=“id”,type=“integer”)
*@ORM\Id
*@ORM\GeneratedValue(strategy=“AUTO”)
*/
私人$id;
/**
*@var字符串$value
*
*@ORM\Column(name=“value”,type=“string”,length=255)
*/
私人美元价值;
/*还有一些*/
}
在这里,我构建了我的表单EmailUserPreferenceType:

类EmailUserPreferenceType扩展了AbstractType{
公共函数buildForm(FormBuilderInterface$builder、array$options){
$builder
->添加('emailPreference','entity',数组(
'class'=>'AdiboxActionBundle:ActionType',
“属性”=>“值”,
“扩展”=>true,
“多个”=>true,
'query\u builder'=>函数(\Adibox\Bundle\ActionBundle\Entity\ActionTypeRepository$er){
返回$er->getAllActionsWithPreferences();
}
));
}
公共函数getName(){
返回“emailUserPreference”;
}
公共函数getDefaultOptions(数组$options){
返回数组('data_class'=>'Adibox\Bundle\UserBundle\Entity\EmailUserPreference');
}
}
最后是ActionTypeRepository,其函数在FormType中调用:

class ActionTypeRepository扩展了EntityRepository{
公共函数getAllActionsWithPreferences(){
$arrayActionWithPreferences=数组(
“分享”,
“拒绝”,
“验证”,
“validatePayment”,
“createPayment”,
“估计变更状态”,
“评论”,
“创建重复”,
“显示”,
“DAFLate”,
);
$qb=$this->createQueryBuilder('a');
$qb->where($qb->expr()->in('a.value',$arrayActionWithPreferences));
返回$qb;
}
}
在这一点上,我认为它是好的:我得到了一个良好的渲染,与正确的形式。但事实上,每个复选框的表单名称都与另一个相同。换句话说,每次提交表单时,它只发送一个post
$builderemailUserPreference[emailUserPreference][]
数据。显然,它并不像我预期的那样工作

我展示这些帖子 这里他使用的是一个小部件集合。我不确定我是否应该使用它或实体(就像我做的那样)。但我可以从中看出,它更像是一种嵌入形式,而不是实体

最后我看到了: 这一个使用(实际上)集合和多对多关系。我在某个地方读到(再也找不到链接)我无法使用它,因为我需要向关系添加一些属性(在本例中是
bool-activated
)。我很确定解决方案就在上面的链接附近,但是找不到好的方法

先谢谢你

任何关于我做错了什么或者我是否应该使用集合而不是实体的建议都将不胜感激