Symfony2:自定义表单集合中的表单元素ID

时间:2011-08-07 16:37:15

标签: symfony

使用表单集合时,表单元素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表(来自数据库)的主键值。

2 个答案:

答案 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而不是键。