jQuery Chosen插件不向Symfony2应用程序发送多个数据

时间:2015-06-17 12:08:04

标签: jquery symfony

我有一个Symfony2表单,它有一个多选框。这是代码......

$builder
    ->add('resources', 'entity', array(
            'class' => 'AppBundle:Entity',
            'property' => 'name',
            'label' => 'product.titles.select_box',
            'attr' => array(
                'class' => 'chosen',
                'data-placeholder' => '-- Choose something --',
                'multiple' => true

            )
        ))

我初始化Chosen就像它应该......

    $('.chosen').chosen({
        no_results_text: "Nothing found"
    });

但是,当提交数据时,我只收到最后选择的实体,而不是所有实体。这可能是什么问题?

如果这是选择的默认行为,是否有人对某些发送所有选定数据的jquery插件有任何建议?

2 个答案:

答案 0 :(得分:2)

您能否在提交表单后向我们展示您尝试访问数据的方式?我试图重现你的问题,但似乎它的效果一样好。样本表单,呈现2个多选字段 - 一个来自实体,另一个来自提供的值数组:

$builder = $this->createFormBuilder()
        ->add('color', 'entity',
            array(
                'class' => 'AppBundle:Color',
                'property' => 'name',
                'multiple' => true
            )
        )
        ->add('choiceColor', 'choice',
            array(
                'choices' => array(
                    'red' => 'red',
                    'blue' => 'blue',
                    'green' => 'green',
                    'yellow' => 'yellow'
                ),
                'multiple' => true
            )
        )
        ->add('submit', 'submit')
        ->getForm()
    ;

然后,只需在提交后转储表单数据

$builder->handleRequest($request);

$data = $builder->getData();
var_dump($data);

我得到以下结果:

array (size=2)
  'color' => 
    object(Doctrine\Common\Collections\ArrayCollection)[447]
      private 'elements' => 
        array (size=2)
          0 => 
            object(AppBundle\Entity\Color)[466]
              ...
          1 => 
            object(AppBundle\Entity\Color)[467]
              ...
  'choiceColor' => 
    array (size=2)
      0 => string 'green' (length=5)
      1 => string 'yellow' (length=6)

如您所见,映射到实体的字段返回ArrayCollection个对象,而使用plain数组映射的字段返回array (size=2)

可能问题出在其他地方。

答案 1 :(得分:0)

找到解决方案。我真蠢。这是我正在使用的代码。

$builder
   ->add('resources', 'entity', array(
        'class' => 'AppBundle:Entity',
        'property' => 'name',
        'label' => 'product.titles.select_box',
        'attr' => array(
            'class' => 'chosen',
            'data-placeholder' => '-- Choose something --',
            'multiple' => true
        )
    ))

这是有效的代码。唯一的变化是multiple => true在根options数组中定义,而不是attr数组。愚蠢的错误。

$builder
   ->add('resources', 'entity', array(
        'class' => 'AppBundle:Entity',
        'property' => 'name',
        'label' => 'product.titles.select_box',
        'attr' => array(
            'class' => 'chosen',
            'data-placeholder' => '-- Choose something --'
        )
        'multiple' => true
    ))