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



我有一个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({
        no_results_text: "Nothing found"
    });

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

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

您能告诉我们您在提交表单后如何尝试访问您的数据吗?我试图重现您的问题,但似乎它同样有效。示例表单,呈现 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(DoctrineCommonCollectionsArrayCollection)[447]
      private 'elements' => 
        array (size=2)
          0 => 
            object(AppBundleEntityColor)[466]
              ...
          1 => 
            object(AppBundleEntityColor)[467]
              ...
  'choiceColor' => 
    array (size=2)
      0 => string 'green' (length=5)
      1 => string 'yellow' (length=6)

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

所以问题可能出在其他地方。

找到了解决方案。我傻了。这是我使用的代码。

$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
    ))

最新更新