在尝试习惯symfony3表单时,我在自定义表单视图时遇到问题。
我正在尝试建立一个赌注足球比赛的表格,如
team1Name(logoTeam1)[1]:[2](logoTeam2)team2Name
team3Name(logoTeam3)[2]:[0](logoTeam4)team4Name ...
很简单,我想但不是用symfonies表单构建器(或者我可能不接受它)。
我通读了(我认为)所有文档,但还没有找到一个干净的解决方案。我认为通过使用自定义数组表单是可能的,但这看起来很脏。
所以我试着让我的课程符合symfonies形式的逻辑。
使用的类:
gamebet :由betteam1整数,betteam2整数,游戏对象和其他一些东西组成,并通过学说与游戏相关联
https://github.com/Invis00/pub/blob/master/Gamebet.php
游戏:拥有Team1Name,Team2Name等游戏信息
https://github.com/Invis00/pub/blob/master/Game.php
gamebetCollection :我创建的一个类来保存gamebet对象的集合,因为我的表单中的每一行都是一个gamebet对象,因此我可以使用smyfonies Collection Type。
自定义GamebetType
class GamebetType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('betteam1', IntegerType::class);
$builder->add('betteam2', IntegerType::class);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Gamebet',
));
}
}
控制器:
(...)
$formbuilder = $this->createFormBuilder($userBets);
$form = $formbuilder
->add('gamebets', CollectionType::class, array(
'entry_type' => GamebetType::class,
'entry_options' => array(
'required' => false,
'attr' => array('gamebets' => $userBets)
)))
->add('bet', SubmitType::class, array('label' => 'Tippen'))
->getForm();
(...)
模板
{{ form_start(form) }}
<table>
{% for gamebet in form.gamebets %}
<tr>
<td>{{ form_label(gamebet.betteam1) }}</td>
<td><img src=pic/</td>
<td>{{ form_row(gamebet.betteam1) }}</td>
<td> : </td>
<td>{{ form_row(gamebet.betteam2) }}</td>
<td></td>
<td>{{ form_label(gamebet.betteam2) }}</td>
</tr>
{% endfor %}
</table>
{{ form_end(form) }}
经过一番搜索后,我至少能够构建表格并为每个游戏玩家创建一行,虽然它对我来说似乎并不“干净”。
我的问题: 如何为集合中的每个对象自定义标签,以便我可以渲染团队名称?目前我完全不知道如何传递和获取该集合的单个目标的数据。
是否可以在自定义类型中访问它(我试图通过数组传递它但不知道如何获取“当前”对象)。
是否可以在模板中访问它,因为我不仅需要标签,还需要创建Logos URL。
有没有办法访问这些信息,因为目前我真的不知道如何解决这个简单的表单问题。
答案 0 :(得分:0)
如果我理解你想做什么,你就不需要一个gamebetCollection课程。
相反,您应该使用collectionType和&#39; data_class&#39;创建父表单。 =&GT;空。
您可以使用symfony cookbook文档: http://symfony.com/doc/current/cookbook/form/form_collections.html 要么 One form with all row of one entity
更新
在你的Twig中你可以做类似的事情:
{% for for gamebet in form.gamebets %}
{{ form_errors(gamebet) }}
<tr>
<td>{{ form_label(gamebet.betteam1) }}</td>
<td><img src=pic/{{ gamebet.vars.value.betteam1 }}.jpg</td>
<td>{{ form_widget(gamebet.betteam1, {'attr': {'class': 'c-select'}}) }}</td>
...
</tr>
{% endfor %}
答案 1 :(得分:0)
转储解决了!在gamebet.vars.data中,存储了表单的相应对象。所以从那里可以得到我需要的所有信息:gamebet.vars.data.game.team1.getNamelong谢谢!