Symfony表单:收集数据数组

时间:2014-08-11 07:23:00

标签: symfony symfony-forms

我需要通过输入字段收集数据数组。例如:

<input name="customer_name" type="text">
<input name="customer_emails[]" type="text">
<input name="customer_emails[]" type="text">
<input name="customer_emails[]" type="text">

如何在Symfony2表单构建器中呈现此类表单?

文档说:

$builder->add('emails', 'collection', array(
    // each item in the array will be an "email" field
    'type'   => 'email',
    // these options are passed to each "email" type
    'options'  => array(
        'required'  => false,
        'attr'      => array('class' => 'email-box')
    ),
));

我不清楚我应该在哪里提供我想要的电子邮件字段数。

2 个答案:

答案 0 :(得分:3)

收集字段的确切数量由绑定到表单的模型决定。仔细看看Symfony collection field type documentation中的最后一段:

  

在这两种情况下,除非您的电子邮件数据,否则不会呈现任何输入字段   数组已包含一些电子邮件。

     

在这个简单的例子中,仍然无法添加新地址或   删除现有地址。使用可以添加新地址   allow_add选项(以及可选的原型选项)(参见   例子如下)。可以通过以下方式删除电子邮件阵列中的电子邮件   allow_delete选项。

因此,如果您需要接受三个电子邮件地址,请确保绑定到表单的数据设置了相应的值,或者考虑'allow_add'的{​​{1}}选项类型。

答案 1 :(得分:2)

@kix所说的绝对正确。

但是,如果您想提供初始数量的字段,您可以:

$object = ... # Some object... 
$object->setEmail(array("", "", "")); # for example, 3 addresses
$form = $this->createForm(new SomeFormType(), $object);

####
# REST OF YOUR LOGIC
####

$view = $form->createView();