2015-10-26 25 views
3

我想將字段country(字符串)添加到我的Form\TypeSymfony:FormType,Entity,queryBuilder - 如何更改生成選項的值?

country是不相關的Entity\Country,並應存儲的國家碼(恩,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> 

謝謝!

+1

數據變壓器(http://symfony.com/doc/current/cookbook/form/data_transformers.html)可能會幫助,雖然我認爲這將是減少混亂只使用一個普通的選擇列表而不是實體類型。製作一個自定義的CountryFormType並讓它查詢國家代碼。 – Cerad

回答

1

如果您使用的是symfony 2.7,請使用entity表單字段類型的choice_label選項。如果使用舊版本的symfony,請使用property選項。點擊此處瞭解詳情:http://symfony.com/doc/current/reference/forms/types/entity.html

+0

'這是應該用於在HTML元素中將文本顯示爲實體的屬性。如果留空,實體對象將被轉換爲一個字符串,因此必須有一個__toString()方法。「這不是@Mr。 B.在問。 他希望選項值與實體的另一個屬性相關聯,而不是Id – stevenll

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" 
    )); 
} 
相關問題