我没有对实体使用任何 ORM。此表单仅用于发送电子邮件。
在我的控制器中我有这个:
$builder = $this->myHelper
->createBuilder('form', null)
->add('my_group', 'collection', array(
'type' => 'text',
'label' => 'mylabel'
));
$builder->get('my_group')->add('first_node', 'text');
$builder->get('my_group')->add('second_node', 'text');
return $builder->getForm();
表单呈现正常 - 带有预期的附加输入字段。但是,当在我的数据后处理操作中将请求绑定到表单时 -
my_group
字段变为空(即使由于该字段发布在 'form'
数组中):
// var_dump($request->get('form'));die;
array
'my_group' =>
array
'first_node' => string 'asdasd' (length=3)
'second_node' => string 'asdasda' (length=3)
当我将请求绑定到表单时,
my_group
集合字段中为空(所有其他输入都可以)。
$form->bindRequest($request);
$formData = $form->getData();
var_dump($formData);die; // Outputs my_group => null
我做错了什么?
Twig 模板的一部分:
{% for field in form.children if 'hidden' not in field.vars.types %}
...
{% elseif 'collection' in field.vars.types %}
<th>{{ form_label(field) }}</th>
<td>
{% for collection_field in field %}
{{ form_widget(collection_field) }}
{% endfor %}
</td>
{% else %}
...
{% endfor %}
您需要创建:
查看本教程:)
当我为所需的集合定义
FormType
时,我的问题得到了解决:
class MyType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('first_node', 'text');
$builder->add('second_node', 'text');
}
public function getDefaultOptions(array $options)
{
return array();
}
public function getName()
{
return 'mytype';
}
}
然后我在builder中使用了它:
$builder = $this->myHelper
->createBuilder('form', null)
->add('my_group', new MyType(), array(
'label' => 'mylabel'
));
return $builder->getForm();
此数据绑定后即可正确形成。