Коллекция форм Symfony2: отображается индекс текущего объекта - PullRequest
30 голосов
/ 18 января 2012

У меня проблема с отображением коллекции в моей форме.

При отображении моей коллекции сущностей у меня есть что-то вроде этого:

0
Name: myInputName
Address: myInputAddress

1
Name: myInputName
Address: myInputAddress

У меня вопрос, почему Symfony2 отображаетиндекс ...

И это для всех сохраненных объектов в моей коллекции ...

Вот код, который я использую:

$builder            
        ->add('person', 'collection', array(   
            'label' => ' ',             
            'type' => new PersonType(),
            'prototype' => true,
            'allow_add' => true,
            'allow_delete' => true,
            'by_reference' => false,
        ))
    ;

В моем файле ветки:

<div>
    {{ form_widget(edit_form) }}    
</div>

Помогите пожалуйста

Сэм

Ответы [ 5 ]

81 голосов
/ 11 января 2014

Удаление индексов (ярлыков) для элементов коллекции:

$builder            
    ->add('person', 'collection', array(
        ...
        'options' => array('label' => false)
    ))
;

Используйте ключ entry_options вместо options для Symfony 3 и 4

Если выЕсли вы хотите добавить собственные метки для каждой строки, вы можете создать форму самостоятельно:

{{ form_start(edit_form) }}
    {% for person in form.persons %}
        {{ form_row(person, {'label': 'custom label per item' }) }}
    {% endfor %}
{{ form_end(edit_form) }}

Примечание : проверено на Symfony 2.3 и 2.4

6 голосов
/ 20 апреля 2017

Это было несколько дней назад, но, поскольку я столкнулся с тем же вопросом для Symfony 3, ответ sectus является правильным.

Используйте параметр

'entry_options' => ['label'=>false],

в вашем сборщике, чтобыскрыть объект предмета.

С наилучшими пожеланиями

3 голосов
/ 19 января 2012

Вы можете настроить отображение вашей коллекции, чтобы не отображать индекс, например:

{% block _FORMNAME_person_widget %}
{% spaceless %}
    {% for child in form %}
        {{ form_widget(child.Name) }}
        {{ form_widget(child.Address) }}
    {% endfor %}
{% endspaceless %}
{% endblock %}
1 голос
/ 13 марта 2015

Я знаю, что это было закрыто некоторое время.И не уверен, что это было решено в другом месте.Эта проблема на самом деле довольно проста, и я удивлен, что нигде нет документации по этому вопросу.В PersonType или любом другом типе, который используется в коллекциях, просто измените vars ['name'] в buildView так, чтобы он отображался как метка.

public function buildView(FormView $view, FormInterface $form, array $options)
{
    // Adjust the view based on data passed
    $this->vars['name'] = $form->getData();
    // Or...
    $this->vars['name'] = 'Some random string';
}

Если вы хотите, чтобы он был динамическим, выбудет использовать объект с помощью form-> getData ().Поскольку в моей задаче я использую тему формы, переопределение ветки для меня не совсем вариант.

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 18 июня 2015

Используя решение @ MrBandersnatch, приведенное ниже, мне пришлось использовать $view->vars['name'] вместо $this->vars['name'] (Symfony 2.3).

(извиняюсь за то, что не добавил это в качестве комментария к ответу @ MrBandersnatch, у меня еще недостаточно репутации).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...