使用表单集合时,表单元素ID由sf2
自动构建窗体/ WeekType.php
class WeekType extends AbstractType
{
public function getName()
{
return "MyBundle";
}
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('fixtures', 'collection', array(
'type' => new FixtureType(),
));
}
}
窗体/ FixtureType.php
class FixtureType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('score1', 'text');
}
}
此代码生成以下表单元素:
<select id="MyBundle_fixtures_0_score1" />
<select id="MyBundle_fixtures_1_score1" />
0,1 ...只是当前的迭代索引。
我想更改select标签的ID。例如,放置主键值(来自Model)而不是迭代索引。
<select id="MyBundle_fixtures_151_score1" />
<select id="MyBundle_fixtures_152_score1" />
甚至:
<select id="MyBundle_fixtures_0_score1_151" />
<select id="MyBundle_fixtures_1_score1_152" />
151,152是Fixture表(来自数据库)的主键值。
答案 0 :(得分:1)
您可以在实体类中为 OneToMany 关系列(灯具)添加“ indexBy ”注释,或在DQL中使用 INDEX BY 关键字:
/**
* @ORM\OneToMany(targetEntity="Entity", mappedBy="ref", indexBy="id")
*/
private $fixtures;
http://doctrine-orm.readthedocs.org/en/latest/tutorials/working-with-indexed-associations.html
答案 1 :(得分:0)
我认为有两种方法可以做到这一点:
您可以自己修改传递给表单的集合的键,例如使用ids而不是键创建新集合。
您可以修改ResizeFormListener以使用ID而不是键。