2013-03-15 85 views
1

請幫助我!自定義choiceType字段

我正在嘗試爲帶顏色的產品製作窗體。顏色是數據庫中的對象。

$builder 
    ->add('product') 
    ->add('colors', 'choice', 
     array(
      // $colors is array of objects [id: {id: 1, name: "red", "img": "pic_path"} 
      'choices' => $colors, 
      'expanded' => true 
     ) 
    ) 
; 

我想得到一個自定義的無線電輸入表單,其中包含Color對象的名稱和圖片。

回答

0

您可以在this documentation中找到有關自定義字段類型和自定義模板的文檔。

我將創建一個choice_with_images自定義類型,該類型可擴展choice類型併爲其創建自定義模板。

另外,類型名稱choice後面的代碼中缺少一個引號。

+0

是的,我試過了。但它看起來像我需要某種數據轉換器。但是,該字段正在轉換「Color」元素數組中的所有數據,從而導致錯誤「Color無法轉換爲字符串」 – IlyaDoroshin 2013-03-17 14:51:47

1

我有同樣的問題,我的問題,通過以下解決方案

$dql="SELECT c.id, c.name FROM YourBundle:YourTable c ORDER BY c.id"; 
    $query = $em->createQuery($dql)->getArrayResult(); 

    for ($i=0; $i < count($query) ; $i++) 
      { 
       $queryArray[$query[$i]['id']]=$query[$i]['name']; 
      } 
    $form = $this->createFormBuilder() 

      ->add('colors', 'choice', array('choices' => array($queryArray))) 

      ->getForm(); 
0

解決如果顏色的實體在您的項目,那麼你應該使用實體字段類型來代替。

$builder 
    ->add('product') 
    ->add('colors', 'entity', 
    array(
     'class' => 'WhateverYourBundle:Color', 
     'multiple' => false, 
     'expanded' => true 
    ) 
); 

如果只有一些可用於產品的顏色,那麼您也可以向該陣列傳遞'query_builder'選項。請參閱文檔:http://symfony.com/doc/2.0/reference/forms/types/entity.html

哦,並且不要忘記將__toString()方法添加到您的顏色實體中,如果這裏沒有一個。