oco*_*rnu 7 symfony doctrine-orm
我正在尝试自定义在子表单中生成的表单标签.
我想显示特定游戏周中包含的足球装备,如下所示:
- 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,
);
Run Code Online (Sandbox Code Playgroud)
表格/ WeekType.php
class WeekType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('fixtures', 'collection', array(
'type' => new FixtureType(),
));
}
}
Run Code Online (Sandbox Code Playgroud)
Fixture表单添加了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**));
}
}
Run Code Online (Sandbox Code Playgroud)
我使用这段代码显示所有灯具,效果很好.
index.html.twig
{% for fixture in week.form.fixtures %}
{{ form_widget(fixture) }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
也许我可以直接在index.html.twig中自定义我的标签,但是如何获得灯具数据呢?
有人遇到这个问题并解决了吗?
我找到了解决方案!
在"index.html.twig"模板中,我迭代了表单元素.那是一个错误.我只需要迭代灯具并获得相关的表单小部件.
index.html.twig
{% for fixture in week.fixtures %}
fixture.HomeTeam.name
{{ form_widget(week.form.fixtures[loop.index0]) }}
fixture.AwayTeam.name
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
诀窍是直接从表单小部件数组中检索表单元素:
week.form.fixtures[loop.index0]
Run Code Online (Sandbox Code Playgroud)