Запрос привязки к форме не работает для типа коллекции
Я не использую 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
Что я делаю неправильно?
ОБНОВЛЕНИЕ 1
Часть шаблона Twig (запрошено Max Małecki):
{% 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 %}
2 ответа
Моя проблема была решена, когда я определил 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 = $this->myHelper
->createBuilder('form', null)
->add('my_group', new MyType(), array(
'label' => 'mylabel'
));
return $builder->getForm();
После этого данные должны были сформироваться правильно.
Вам необходимо создать:
- форма класса
- шаблон формы (с макросом)
- Скрипт jQuery для манипулирования данными в форме
Проверьте этот урок:)