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

时间:2015-10-26 11:27:58

标签: php symfony doctrine symfony-forms

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

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

我将Entity\Country的国家/地区代码加载到我的表单中,但生成的select将实体的ID作为值,__toString() - 返回为文本。

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

FormType:

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>
    <option value="1">en</option>
    <option value="2">it</option>
    <option value="3">fr</option>
</select>

所需选择:

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

提前致谢!

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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"
    ));
}