Symfony表单:创建多个电子邮件字段

时间:2017-05-03 10:05:04

标签: php symfony doctrine-orm

更新 我在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',
            ),
        )
    );

但这不起作用:(

1 个答案:

答案 0 :(得分:2)

只有当您为每封电子邮件提供多个电子邮件字段时,才需要Collection类型字段;在javascript的帮助下并使用Add new email按钮。

如果用户要添加以逗号分隔的电子邮件,则您不需要Collection类型字段。保持简单文本类型字段和帮助文本一样。

现在,在setter [setNotificationEmails]中,您应该将csv电子邮件字符串拆分为数组并将其反馈到ORM。 ORM完成其余工作以保存在数据库中。

你应该在getter [getNotificationEmails]中将反之亦然(将数组转换为字符串)。因此,您的表单可以代表以逗号分隔的电子邮件。

如果上述情况不起作用,我怀疑,表单可能无法从getter读取数据。在这种情况下,您始终可以使用Transformer。它很有用。