自定义choiceType字段

时间:2013-03-15 13:34:22

标签: symfony-2.1 symfony-forms

拜托,帮助我!

我正在尝试为带有颜色的产品制作表单。颜色是数据库中的对象。

$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-object的名称和图片。

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

您可以在this documentation中找到有关自定义字段类型和自定义模板的文档。

我会创建一个choice_with_images自定义类型,扩展choice类型并为其创建自定义模板。

此外,代码名称choice后代码中缺少引号。

答案 2 :(得分: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()方法,如果还没有那个。