2011-07-17 17 views
7

Alt formlarda oluşturulan form etiketlerini özelleştirmeye çalışıyorum.Symfony2: form koleksiyonlarındaki form etiketlerini özelleştirme

aşağıdaki gibi belirli bir oyun haftası içinde bulunan futbol armatürleri, görüntülemek istediğiniz:

 
- Fixture 1 : Manchester United (0) - (1) Arsenal 
- Fixture 2 : Chelsea (2) - (1) Liverpool 
- ... 

Benim formu görüntüler

tüm eşyalar ve ilgili skorları ancak tüm etiketler veritabanı sütun adları (ve Skor1, Skor2 içerirler). Bunun yerine takım isimlerini koymak istiyorum. nedenle, şu anda gösterilmektedir: denetleyicisi
 
- Fixture 1 : score1 (0) - (1) score2 
- Fixture 2 : score1 (2) - (1) score2 
- ... 

, bir hafta form (WeekType) üretir. $ hafta hafta içi $> getFixtures() kullanarak hafta verileri ve fikstür verileri içerir.

Kontrolör/DefaultController.php

$form = $this->createForm(new WeekType(), $week)->createView(); 

return array(
    'form' => $form, 
); 

Formu/WeekType.php

class WeekType extends AbstractType 
{ 
    public function buildForm(FormBuilder $builder, array $options) 
    { 
     $builder->add('fixtures', 'collection', array(
      'type' => new FixtureType(), 
     )); 
    } 
} 

Armatür formu 2 alan ekler. Varsayılan etiketleri takım isimleriyle değiştirmek istiyorum. Ancak bu formdaki fikstür verilerine erişemiyorum. $ seçenekler NULL. $ Options ['data'] fikstür verileri içereceğini düşündüm ... ama yanılmışım.

Formu/FixtureType.php

class FixtureType extends AbstractType 
{ 
    public function buildForm(FormBuilder $builder, array $options) 
    { 
     $builder->add('score1', 'text', array('label' => **WHAT TO PUT HERE**)); 
     $builder->add('score2', 'text', array('label' => **WHAT TO PUT HERE**)); 
    } 
} 

Bu kodu kullanarak tüm demirbaşlar görüntüler ve harika çalışıyor.

{% for fixture in week.form.fixtures %} 
     {{ form_widget(fixture) }} 
    {% endfor %} 

index.html.twig

Belki index.html.twig doğrudan Etiketlerime özelleştirmek olabilir ama nasıl fikstürler veri alabilirim?

Birisi bu sorunla karşılaşır ve giderir mi?

cevap

5

ben bir çözüm buldum!

"index.html.twig" şablonunda, form öğeleri üzerinde yineledim. Bu bir hataydı. Ben sadece fikstür üzerinde yinelemek ve ilgili form widget almak zorunda kaldı.

index.html.

{% for fixture in week.fixtures %} 
    fixture.HomeTeam.name 
    {{ form_widget(week.form.fixtures[loop.index0]) }} 
    fixture.AwayTeam.name 
{% endfor %} 

trick dal şekilde aletler dizisi tarafından doğrudan bir şekilde elemanları almak için:

week.form.fixtures[loop.index0]