Symfony:FormType、Entity、queryBuilder - 如何更改生成选项的值?

Symfony: FormType, Entity, queryBuilder - how change the value of generated options?

我想将字段 country (string) 添加到我的 Form\Type

countryEntity\Country 无关,应该存储国家代码 (en, it, fr, ...) 而不是实体的 ID。

我将 Entity\Country 的国家代码加载到我的表单中,但生成的 select 具有实体 ID 作为值,__toString()-return 作为文本.

如何将 c.code 设置为 <option> 的值?

表格类型:

public function buildForm(FormBuilderInterface $builder, array $options) {
    $builder->add('country', 'entity', array(
        'class' => 'appBundle:Country',
        'query_builder' => function (EntityRepository $er) {
            return $er->createQueryBuilder('c')->orderBy('c.code', 'ASC');
        }
    ));
}

生成select:

<select>
    <option value="1">en</option>
    <option value="2">it</option>
    <option value="3">fr</option>
</select>

想要select:

<select>
    <option value="en">en</option>
    <option value="it">it</option>
    <option value="fr">fr</option>
</select>

提前致谢!

如果您使用的是 symfony 2.7,请使用 entity 表单字段类型的 choice_label 选项。如果使用旧版本的 symfony,请使用 property 选项。更多信息在这里:http://symfony.com/doc/current/reference/forms/types/entity.html

public function buildForm(FormBuilderInterface $builder, array $options) {
    $builder->add('country', 'entity', array(
        'class' => 'appBundle:Country',
        'query_builder' => function (EntityRepository $er) {
            return $er->createQueryBuilder('c')->orderBy('c.code', 'ASC');
        },
        'choice_value'=>"country-code", //(country-code = column name in database)
        'choice_label'=>"country-name"
    ));
}