2012-01-18 72 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], 

選擇隱藏他反對項目。

最好的問候

相關問題