我有一个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
))