Symfony2表单中的自定义实体数据处理
我目前正在使用Symfony 2.6在一个站点上实现通知首选项 持有通知首选项的实体如下所示:Symfony2表单中的自定义实体数据处理,symfony,symfony-forms,symfony-2.6,Symfony,Symfony Forms,Symfony 2.6,我目前正在使用Symfony 2.6在一个站点上实现通知首选项 持有通知首选项的实体如下所示: class UserNotification { //... /** * @ORM\Column(type="boolean") */ private $downtimeNotificationEnabled; /** * @ORM\Column(type="boolean")
class UserNotification
{
//...
/**
* @ORM\Column(type="boolean")
*/
private $downtimeNotificationEnabled;
/**
* @ORM\Column(type="boolean")
*/
private $newPostNotificationEnabled;
//...
}
目前大约有15种不同的键,但我现在还想允许为每种类型配置电子邮件、SMS和仪表板通知。我没有为每种类型创建两个额外的列,而是考虑将每个启用的$*列类型从boolean
更改为doctorarray
,并将数据作为关联数组保存在每个表列中(['dashboard'=>true,'email'=>false,'sms'=>true]
)
我的问题是如何将此数组
列挂接到Symonfy表单类型中。据我所知,我可以为字段创建一个自定义类型,并使用它来代替我当前使用的'checkbox'
类型。大概是这样的:
class NotificationSettingType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('dashboard', 'checkbox', [
'mapped' => false,
'data' => true
])
->add('email', 'checkbox', [
'mapped' => false,
'data' => true
])
->add('sms', 'checkbox', [
'mapped' => false,
'data' => true
])
;
}
//...
}
…和主要形式类型
class NotificationsType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('downtimeNotificationEnabled', new NotificationSettingType())
->add('newPostNotificationEnabled', new NotificationSettingType())
//...
;
}
}
但是,我不明白如何用实体中的数组
数据填充NotificationSettingType
中的复选框
类型的值
编辑1
进一步澄清:
我正在寻找如何将数据绑定到UserNotification
中的列
比如说:
UserNotification::$downtimeNotificationEnabled = [
'dashboard' => true,
'email' => false,
'sms' => true
]
然后在此列的通知设置类型中:
- 将选中“仪表板”
“电子邮件”
将被取消选中
“sms”
将被选中
然后,在提交后,如果我取消选中SMS,例如,新数组将位于列变量中,如下所示:
UserNotification::$downtimeNotificationEnabled = [
'dashboard' => true,
'email' => false,
'sms' => false
]
我知道如何传递选项,但不知道如何转换此数据以使其与Symfony2表单类型兼容。您要做的是将FormEvents::PRE_SET_data事件添加到NotificationSettingType。这将允许根据UserNotification实体内的数据选中复选框。虽然有一点偏离主题,但是如果你有15个布尔列,那么你真的应该考虑在用户和用户通知之间使用OntOMoNe关系。目前,如果不更改实体,您将无法添加其他通知。谢谢,我会看一看,但为什么这是一条评论而不是答案?此外,要添加其他通知,无论如何都需要更改代码,因为需要实现这些通知。一对多没有我所能看到的好处,而且使代码更加复杂。懒得写一个真正的答案。就关系而言,这只是一个建议。我将从定义通知的配置数组开始。一旦实现,就可以通过调整配置来添加额外的功能。前期可能需要做更多的工作,但可能会节省大量的锅炉板代码。再说一次,只是一个建议。