更新 我在Symfony文档中找到了我的案例的答案和示例教程:http://symfony.com/doc/current/reference/forms/types/collection.html#basic-usage
如何在Symfony 3.1中为表单分配多个电子邮件字段? 在我的实体中,我有:
/**
* @var array
* @ORM\Column(name="notification_emails", type="array", nullable=true)
*/
private $notificationEmails;
/**
* @return array
*/
public function getNotificationEmails()
{
return $this->notificationEmails;
}
/**
* @param array $notificationEmails
*/
public function setNotificationEmails($notificationEmails)
{
$this->notificationEmails = $notificationEmails;
}
在我的表格中,我有:
$builder->add(
'notificationEmails',
CollectionType::class,
array(
'entry_type' => EmailType::class,
'label' => 'Add more emails separated by comma',
'attr' => array(
'multiple' => 'multiple',
),
)
);
但这不起作用:(
答案 0 :(得分:2)
只有当您为每封电子邮件提供多个电子邮件字段时,才需要Collection
类型字段;在javascript
的帮助下并使用Add new email
按钮。
如果用户要添加以逗号分隔的电子邮件,则您不需要Collection
类型字段。保持简单文本类型字段和帮助文本一样。
现在,在setter
[setNotificationEmails
]中,您应该将csv电子邮件字符串拆分为数组并将其反馈到ORM。 ORM完成其余工作以保存在数据库中。
你应该在getter [getNotificationEmails
]中将反之亦然(将数组转换为字符串)。因此,您的表单可以代表以逗号分隔的电子邮件。
如果上述情况不起作用,我怀疑,表单可能无法从getter读取数据。在这种情况下,您始终可以使用Transformer。它很有用。