我有一个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插件有任何建议?
答案 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
))