我目前正在使用Symfony 2.6在网站上实现通知首选项。
持有通知偏好的实体如下:
class UserNotification
{
//...
/**
* @ORM\Column(type="boolean")
*/
private $downtimeNotificationEnabled;
/**
* @ORM\Column(type="boolean")
*/
private $newPostNotificationEnabled;
//...
}
目前大约有 15 个这样的不同键,但我现在还想允许为每种类型配置Email、SMS和Dashboard通知。我没有为每种类型创建两个额外的列,而是考虑将每个$*Enabled
列类型从更改boolean
为 Doctrine array
,并将数据作为关联数组 ( ['dashboard' => true, 'email' => false, 'sms' => true]
) 保存在每个表列中。
我的问题是关于然后将此array
列连接到 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())
//...
;
}
}
但是后来我不明白如何用实体中的数据填充'checkbox'
类型的值。NotificationSettingType
array
编辑 1
进一步澄清:
我正在寻找如何将数据从/绑定到UserNotification
特定的列。
例如,说:
UserNotification::$downtimeNotificationEnabled = [
'dashboard' => true,
'email' => false,
'sms' => true
]
然后在NotificationSettingType
本专栏中:
'dashboard'
会被检查'email'
将不被选中'sms'
会被检查
然后,在提交之后,例如,如果我取消选中SMS,则新数组将在列变量中为:
UserNotification::$downtimeNotificationEnabled = [
'dashboard' => true,
'email' => false,
'sms' => false
]
我知道如何传递选项,但我不知道如何转换这些数据以使其与 Symfony2 表单类型兼容。