2012-01-18 80 views
23

我在表单中显示集合时遇到问题。Symfony2表单集合:显示当前对象的索引

当显示我的实体集合我有这样的事情:

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> 

请帮助

山姆

回答

1

你可以自定义你的集合不显示随着指数的渲染,通过例如:

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

非常感谢你......无空间的方法删除没有小部件的标签? – Sam 2012-01-19 14:36:17

+0

“删除HTML标记之间的空白”(http://twig.sensiolabs.org/doc/tags/spaceless.html) 它在\ vendor \ symfony \ src \ Symfony \ Bridge \ Twig \ Resources \ views \ Form \ form_div_layout.html.twig – webda2l 2012-01-19 14:55:31

+4

这并不能真正解决问题。相反,它只是隐藏了显示的索引。我想知道如何改变索引来表示实体的另一个值? – 2014-01-10 09:17:10

75

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

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

如果你想添加每行你就可以生产自己的表单自定义标签:

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

+0

我希望能够在建筑商内部做到这一点,但是这个解决方案是可行的。谢谢! – 2014-01-14 06:08:32

+25

对于symfony3,使用''entry_options''而不是''options'' – sectus 2016-02-26 07:02:05

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

希望这可以帮助别人。

+0

我不知道这是否在Symfony 2.7中发生了变化,但它现在似乎是'$ form-> vars ['name'] ='Foo bar baz';' – StuBez 2015-06-24 13:55:20

+1

在Symfony 3中它是'$ view-> vars ['name']' – 2016-12-23 18:59:26

0

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

(道歉没有将此添加为@ MrBandersnatch的回答评论,我还没有足够的声望)。

4

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

使用您的建设者内

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

选择隐藏他反对项目。

最好的问候

相关问题