【问题标题】:Custom choiceType field自定义选择类型字段
【发布时间】:2013-03-04 06:02:00
【问题描述】:

请帮帮我!

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

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

【问题讨论】:

    标签: symfony-2.1 symfony-forms


    【解决方案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();
    

    【讨论】:

      【解决方案2】:

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

      我将创建一个扩展 choice 类型的 choice_with_images 自定义类型并为其制作自定义模板。

      此外,您的代码中类型名称 choice 后面缺少引号。

      【讨论】:

      • 是的,我试过了。但看起来我需要某种数据转换器。但是,该字段正在翻译 Color 元素数组中的所有数据,这会给出“无法将颜色转换为字符串”的错误
      【解决方案3】:

      如果颜色是您项目中的一个实体,那么您应该改用实体字段类型。

      $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() 方法,请不要忘记将 __toString() 方法添加到您的颜色实体中。

      【讨论】:

        猜你喜欢
        • 2013-09-13
        • 1970-01-01
        • 2023-03-13
        • 2017-09-29
        • 2018-09-12
        • 1970-01-01
        • 2012-12-27
        • 2017-03-21
        • 1970-01-01
        相关资源
        最近更新 更多