2012-01-18 32 views
23

Tôi gặp sự cố khi hiển thị bộ sưu tập dưới dạng của tôi.Bộ sưu tập biểu mẫu Symfony2: Chỉ mục của đối tượng hiện tại được hiển thị

Khi hiển thị bộ sưu tập thực thể của tôi, tôi đã có một cái gì đó như thế này:

0 
Name: myInputName 
Address: myInputAddress 

1 
Name: myInputName 
Address: myInputAddress 

Câu hỏi của tôi là lý do tại sao Symfony2 hiển thị index ...

Và điều này cho tất cả các đơn vị lưu vào bộ sưu tập của tôi ...

Dưới đây là đoạn code tôi sử dụng:

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

Trong file cành lá của tôi:

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

Trợ giúp xin vui lòng

Sam

Trả lời

1

Bạn có thể tùy chỉnh việc vẽ của bộ sưu tập của bạn cho không hiển thị các chỉ số với, bởi ví dụ:

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

cảm ơn bạn rất nhiều ... Phương pháp không gian loại bỏ nhãn mà không có tiện ích? – Sam

+0

"xóa khoảng trống giữa các thẻ HTML" (http://twig.sensiolabs.org/doc/tags/spaceless.html) Việc sử dụng nó phổ biến trong \ vendor \ symfony \ src \ Symfony \ Bridge \ Twig \ Resources \ views \ Biểu mẫu \ form_div_layout.html.twig – webda2l

+4

Điều này thực sự không giải quyết được vấn đề. Thay vào đó, nó chỉ giấu chỉ mục khỏi hiển thị. Tôi tự hỏi làm thế nào bạn sẽ thay đổi chỉ số để nói, một giá trị khác của thực thể? –

75

Xóa chỉ mục (nhãn) cho các mục thu thập:

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

Nếu bạn muốn thêm nhãn tùy chỉnh cho mỗi hàng, bạn có thể tạo ra các hình thức bản thân:

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

Note: thử nghiệm trên Symfony 2,3 & 2,4

+0

Tôi đã hy vọng làm điều đó trong công cụ xây dựng, nhưng giải pháp này sẽ làm. Cảm ơn! –

+25

Đối với symfony3 sử dụng ''entry_options'' thay vì'' options'' – sectus

1

Tôi biết điều này đã bị đóng cửa trong một thời gian . Và không chắc chắn nếu điều này đã được giải quyết ở nơi khác. Vấn đề này thực sự là khá đơn giản để sửa chữa và tôi ngạc nhiên không có tài liệu về điều này bất cứ nơi nào. Trong PersonType hoặc bất kỳ loại nào được sử dụng trong một bộ sưu tập chỉ cần sửa đổi các vars ['name'] trong buildView thành những gì bạn muốn hiển thị như là nhãn.

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'; 
} 

Nếu bạn muốn động, bạn sẽ sử dụng đối tượng theo form-> getData(). Vì, trong vấn đề của tôi, tôi đang sử dụng một chủ đề mẫu, ghi đè lên cành cây không thực sự là một lựa chọn cho tôi.

Hy vọng điều này sẽ giúp ai đó.

+0

Tôi không biết nếu điều này đã thay đổi trong Symfony 2.7 nhưng có vẻ như bây giờ là '$ form-> vars ['name'] = 'Foo bar baz '; ' – StuBez

+1

Trong Symfony 3 nó là' $ view-> vars [' name '] ' –

0

Sử dụng giải pháp @ MrBandersnatch bên dưới, tôi đã phải sử dụng $view->vars['name'] thay vì $this->vars['name'] (Symfony 2.3).

(xin lỗi vì không thêm điều này làm nhận xét về câu trả lời của @ MrBandersnatch, tôi chưa có đủ danh tiếng).

4

Đây là một vài ngày trước nhưng vì tôi đã phải đối mặt với cùng một câu hỏi cho Symfony 3, câu trả lời của bài giảng là đúng.

Sử dụng tùy chọn

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

trong xây dựng của bạn để che giấu ông phản đối mục.

Trân trọng

Các vấn đề liên quan