2013-03-15 81 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()方法添加到您的颜色实体中,如果这里没有一个。