Запрос привязки к форме не работает для типа коллекции

Я не использую 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):

{% 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 %}

person Vitalii Zurian    schedule 11.01.2013    source источник
comment
можешь показать мне веточку формы?   -  person Max Małecki    schedule 11.01.2013
comment
@MaxMałecki Это было бы сложно, потому что реальный код намного сложен, и мне пришлось бы извлекать оттуда куски и менять имена переменных. Как twig может повлиять на отправку формы? Даже если эти данные приходят в запрос под массивом form - разве это не значит, что форма отправлена ​​корректно?   -  person Vitalii Zurian    schedule 11.01.2013
comment
@MaxMałecki обновил мой ответ   -  person Vitalii Zurian    schedule 11.01.2013


Ответы (2)


Вам необходимо создать:

  1. класс формы
  2. шаблон формы (с макросом)
  3. Скрипт jQuery для управления данными в форме

Проверьте этот учебник :)

http://toni.uebernickel.info/2012/03/15/an-example-of-symfony2-collectiontype-form-field-prototype.html

person Max Małecki    schedule 11.01.2013
comment
Зачем мне нужен jQuery? Я не хочу динамически добавлять входные данные :) Я просто хочу иметь составные поля, состоящие из двух входных данных. - person Vitalii Zurian; 11.01.2013

Моя проблема была решена, когда я определил 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();

После этого данные должны были сформироваться корректно.

person Vitalii Zurian    schedule 15.01.2013