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

Forms Symfony2表单集合:显示当前对象的索引,forms,symfony,Forms,Symfony,我在表单中显示集合时遇到问题 当显示我的实体集合时,我得到如下结果: 0 Name: myInputName Address: myInputAddress 1 Name: myInputName Address: myInputAddress 我的问题是为什么Symfony2显示索引 这适用于我收藏中所有保存的实体 下面是我使用的代码: $builder ->add('person', 'collection', array(

我在表单中显示集合时遇到问题

当显示我的实体集合时,我得到如下结果:

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>

{{表单小部件(编辑表单)}
请帮忙


Sam

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

{% block _FORMNAME_person_widget %}
{% spaceless %}
    {% for child in form %}
        {{ form_widget(child.Name) }}
        {{ form_widget(child.Address) }}
    {% endfor %}
{% endspaceless %}
{% endblock %}
正在删除集合项的索引(标签):

$builder            
    ->add('person', 'collection', array(
        ...
        'options' => array('label' => false)
    ))
;
对于Symfony 3和Symfony 4,使用键
entry\u 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和2.4上测试

我知道这已经关闭了一段时间。不确定这是否在其他地方得到了解决。这个问题实际上很容易解决,我很惊讶在任何地方都没有关于这个问题的文档。在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->getData()使用对象。因为,在我的问题中,我使用的是一个表单主题,所以覆盖细枝并不是我真正的选择


希望这对某人有所帮助。

使用下面@MrBandersnatch的解决方案,我不得不使用
$view->vars['name']
而不是
$this->vars['name']
(Symfony 2.3)


(很抱歉没有将此作为对@MrBandersnatch的回答的评论,我还没有得到足够的声誉)。

这是几天前的事,但因为我在Symfony 3中面临同样的问题,sectus的回答是正确的

使用

'entry_options' => ['label'=>false],
选项以隐藏对象项


最诚挚的问候

非常感谢您。。。无空格方法在没有小部件的情况下删除标签?“删除HTML标记之间的空白”()它的用法在\vendor\symfony\src\symfony\Bridge\Twig\Resources\views\Form\Form\u div\u layout.HTML.twigt中很常见。这并不能真正解决问题。相反,它只是隐藏索引而不显示。我想知道你会如何改变索引,比如说,实体的另一个价值?我仍然想知道为什么symfony没有在收藏主题化上投入更多的精力。到目前为止,它似乎太多了。我希望在构建器中实现它,但这个解决方案可以。谢谢对于Symfony 3,使用
'entry\u options'
而不是
'options'
@sectus同样适用于Symfony 4有人知道更通用的解决方案吗?是否有类似于捆绑包中预定义的FormType的东西,您可以在form builder中直接定义LabelField?我不知道这在Symfony 2.7中是否发生了更改,但现在似乎是
$form->vars['name']='Foo bar baz'
在Symfony 3中是
$view->vars['name']
这适用于Symfony 4