Symfony2表单集合:显示当前对象的索引

时间:2012-01-18 13:04:16

标签: forms symfony

我在表单中显示收藏时遇到了问题。

在显示我的实体集时,我有这样的事情:

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,
        ))
    ;

在我的twig文件中:

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

请帮助

萨姆

5 个答案:

答案 0 :(得分:81)

删除集合项的索引(标签):

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

对Symfony 3和4

使用密钥entry_options代替options

如果您想为每行添加自定义标签,您可以自己制作表单:

{{ 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&amp; 2.4

答案 1 :(得分:6)

这个是几天前的,但因为我面对Symfony 3的同样问题,所以sectus的答案是正确的。

使用

'entry_options' => ['label'=>false],
构建器中的

选项可隐藏对象项。

最好的问候

答案 2 :(得分:3)

您可以自定义集合的呈现,但不显示索引,例如:

{% block _FORMNAME_person_widget %}
{% spaceless %}
    {% for child in form %}
        {{ form_widget(child.Name) }}
        {{ form_widget(child.Address) }}
    {% endfor %}
{% endspaceless %}
{% endblock %}

答案 3 :(得分:1)

我知道这已经关闭了一段时间。并不确定这是否已在其他地方得到解决。这个问题实际上很容易修复,我很惊讶没有任何关于此的文档。在PersonType或集合中使用的任何类型中,只需将buildView中的vars ['name']修改为您想要显示为标签的内容。

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-&gt; getData()来使用该对象。因为,在我的问题中,我正在使用表单主题,覆盖树枝对我来说不是一个真正的选择。

希望这有助于某人。

答案 4 :(得分:0)

使用下面的@ MrBandersnatch解决方案,我不得不使用&vecStruct[0]而不是&vecStruct[1](Symfony 2.3)。

(对于没有添加这个作为对@ MrBandersnatch的回答的评论而道歉,我还没有足够的声誉)。