2011-07-17 61 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**)); 
    } 
} 

我显示使用此代码的所有灯具,它的伟大工程。

index.html.twig

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

也许我可以直接定制我的标签在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]