作为Silex应用程序的一部分,我有一个包含多个复选框的表单,以便用户可以从列表中选择一个或多个选项。我导入symfony/form
组件来处理后端表单处理。
我正在编写用于手动显示表单的HTML,因为它显示在表格中,我不知道如何让form_widget
助手实现这一点(当我只想要一个表单显示'时,它很好是)。
每个复选框的代码是(plan.id
是每个计划的唯一ID):
<input type="checkbox" name="plans[]" value="{{ plan.id }}">
我正在努力解决的问题是如何处理数据。目前我的路线中的代码是:
$form_builder = $app['form.factory']->createBuilder(FormType::class);
foreach ($plans as $plan) {
$form_builder->add("plans[]", CheckboxType::class);
}
$form = $form_builder->getForm();
$form->handleRequest($request);
$data = $form->getData();
但是,当我提交表单时,我收到以下错误:
名称“计划[]”包含非法字符。名称应以字母,数字或下划线开头,并且只包含字母,数字,数字,下划线(“_”),连字符(“ - ”)和冒号(“:”)。
在没有使用框架的情况下处理名为foo[]
的元素的表单时,我从未遇到过问题。是否可以使用Symfony表单获得相同的结果,还是需要重新考虑我是如何做到的?
composer show
的相关版本为:
silex/silex v2.0.4 The PHP micro-framework based
symfony/form v3.2.2 Symfony Form Component
symfony/validator v3.2.2 Symfony Validator Component
答案 0 :(得分:0)
您应该使用collections作为一组复选框。
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
// ...
$builder->add('plans', CollectionType::class, array(
'entry_type' => CheckboxType::class,
// these options are passed to each "checkbox" type
'entry_options' => array(
'attr' => array('class' => 'check-box')
),
));
答案 1 :(得分:0)
尽管经过多次尝试,我仍然无法获得任何建议的答案/评论。
最后,我只是添加了一个具有唯一名称的复选框(&#34;计划_&#34; + plan.id),而不是尝试创建一个具有相同名称的复选框数组。它并不像处理数组一样干净,我不知道为什么在Symfony中这么麻烦,但它确实有效。