2011-07-17 4 views
7

サブフォームで生成されたフォームラベルをカスタマイズしようとしています。Symfony2:フォームコレクションでフォームラベルをカスタマイズする

私は次のような特定のゲームの週に含まれているサッカーの備品を、表示したい:

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

私のフォームは、すべての備品や関連スコアが表示されますが、すべてのラベルは、データベースの列名(SCORE1、score2が含まれています)。代わりにチーム名を入れたい。 だから、それが現在示しています。コントローラで

 
- Fixture 1 : score1 (0) - (1) score2 
- Fixture 2 : score1 (2) - (1) score2 
- ... 

を、私は週のフォーム(WeekType)を生成します。 $ weekは$ week-> getFixtures()を使って週データとフィクスチャデータを含んでいます。

コントローラ/ DefaultController.php

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

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

フォーム/ WeekType.php

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

フィクス形態は2つのフィールドを追加します。デフォルトラベルをチーム名に置き換えたい しかし、私はこのフォームの治具のデータにアクセスすることはできません。 $ optionsはNULLです。 $ options ['data']にはフィクスチャのデータが入っていると思っていましたが、間違っていました。

フォーム/ 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**)); 
    } 
} 

私はこのコードを使用して、すべての備品を表示し、それは素晴らしい作品。

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

index.html.twig

たぶん私はindex.html.twigに直接私のラベルをカスタマイズすることができますが、どのように私は、フィクスチャデータを得ることができますか?

誰かがこの問題に遭遇して解決しましたか?

答えて

5

私は解決策を見つけました!

"index.html.twig"テンプレートでは、フォーム要素を繰り返し処理しました。 間違いでした。私はちょうど治具を反復し、関連するフォームのウィジェットを取得する必要がありました。

index.html。

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

を小枝トリックフォームウィジェットアレイから直接フォーム要素を検索することである。

week.form.fixtures[loop.index0]