2014-06-17 143 views
4

我想知道是否有辦法在選擇列表中設置選項的值。這個選擇是一個選擇實體字段。Symfony2如何在選擇實體字段中設置選項值

在我的代碼中,一切工作正常。重點是,在我看來,我得到了價值選項中每個字段的ID,我需要在那裏有另一個字段。

我使用option屬性來設置選項名稱中顯示的內容,但我需要設置值字段中還會出現的內容。

我沒有成功找到一個解決方案,直到現在,所以如果任何人都可以幫助我,它將非常感激。

我的表單類型的一小部分。

->add('fieldName','entity', array(
    'class' => 'path\to\entity', 
    'property' => 'name', 
    'multiple' => true, 
    'expanded' => false, 
    ) 

謝謝。

我返回的HTML代碼如下所示

<select> 
    <option value="4">ROLE_EXAMPLE</option> 
</select> 

我想要做的就是這樣的結果:

<select> 
    <option value="specific_property_from_entity">ROLE_EXAMPLE</option> 
</select> 
+0

你能解釋你期望什麼樣的價值嗎? – bartek

+0

把你生成的hmtl和你的期望放在這裏。 –

+0

@bartek我已經舉了一個例子。謝謝。 – grogers

回答

4

可以使用choice類型,而不是entity,這裏的一些例子:

class YourType extends AbstractType 
{ 
    protected $em; 

    // Injecting EntityManager into YourType 
    public function __construct(EntityManager $em) 
    { 
     $this->em = $em; 
    } 

    private function getChoices() 
    { 
     // some logic here using $this->em 
     // it should return key-value array, example: 
     return [ 
      'foo' => 'bar', 
      'test' => 'abc', // and so on... 
     ]; 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('fieldName', 'choice', [ 
      'choices' => $this->getChoices(), 
      ] 
     ) 
    } 

} 

You can read about creating field types as a service

+0

好回答@​​bartek!但getChoices()方法應該返回一個key => value數組,對嗎? return array('id'=>'lorem',value ='lorem') –

+0

謝謝@bartek,這正是我一直在尋找的。 =) – grogers

+0

@SergioCosta是的,它應該返回鍵值數組。 – bartek

0

你可以通過choice_value選項,使用可調用或屬性路徑(getProperty())來填充您的選擇值

->add('fieldName','entity', array(
    'class' => 'path\to\entity', 
    'property' => 'name', 
    'multiple' => true, 
    'expanded' => false, 
    'choice_value => 'Property' 
) 

如果使用可調用來填充choice_value,則需要檢查字段值可能爲空的情況。

相關問題