Визуализация коллекции текстовых полей, которая передается в поле массива Doctrine

В моем объекте у меня есть поле массива:

/**
 * @var array
 *
 * @ORM\Column(name="work_experience", type="array")
 */
private $workExperience;

теперь я хочу отобразить набор текстовых полей, которые будут переданы в это поле массива.

->add('workExperience', 'collection', array(
                'type'         => 'text',
                'allow_add'    => true,
                'allow_delete' => true,
                'prototype'    => true,
                #'by_reference' => false,
                'options'  => array(
                    'required'  => false,
                    'attr'      => array('class' => 'line-box')
                ),
            ))

но теперь, когда я отображаю это поле, ввод не отображается? В чем моя ошибка?

{{ form_row(form.workExperience) }}

Спасибо


person smartius    schedule 18.10.2013    source источник
comment
Можете ли вы показать print_r($form->createView()); с вашего контроллера?   -  person Serge Kvashnin    schedule 18.10.2013
comment
Вам нужно встроить другую форму, которая создает элемент коллекции. Это 'type'=>new YourFormToBeEmbeddedType(),, а не 'type'=>'email'.   -  person Đuro Mandinić    schedule 18.10.2013
comment
Итак, начнем: leadvertise.de/output.html   -  person smartius    schedule 18.10.2013
comment
документы symfony2 говорят, что это возможно и без сущностей: symfony.com/ doc/current/reference/forms/types/collection.html в примере они легко используют тип поля электронной почты   -  person smartius    schedule 18.10.2013


Ответы (1)


При прототипировании поле (поля) коллекции визуализируется только в том случае, если вашей сущности присвоено значение workExperience внутри вашего контроллера. В противном случае вам нужно будет использовать javascript для получения информации о прототипе и создания поля (полей) ввода, это также верно если вы хотите добавить новые поля с или без вашего объекта, имеющего какое-либо значение.

Чтобы получить следующее для рендеринга со значениями

{{ form_row(form.workExperience) }}

Вы можете сделать что-то вроде следующего:

public function controllerAction(Request $request)
{
    //By populating your entity with values from your database
    //workExperience should receive a value and be rendered in your form.
    $em = $this->getDoctrine()->getManager();
    $entity = $em
       ->getRepository('yourBundle:entity')
       ->findBy(...yourParameters...);


$form = $this->createForm('your_form_type', $entity);
...

Or

...
//If you do not have any data in your database for `workExperience` 
//then you would need to set it in your controller.

$arr = array('email' => '[email protected]', 'phone' => '888-888-8888');
$entity->setWorkExperience($arr);
$form = $this->createForm('your_form_type', $entity);
...

Имейте в виду, что коллекции обычно используются для отношений «один ко многим» или «многие ко многим». Можно использовать его для массива, но на нем не так много документации. Хотя эта ссылка не совсем подходит, общие идеи, представленные здесь, могут быть полезны: form_collections< /а>

person hcoat    schedule 19.10.2013