使用 Symfony 表单组件处理带有多个复选框的表单
Processing form with multiple checkboxes using Symfony form component
作为 Silex 应用程序的一部分,我有一个带有多个复选框的表单,以便用户可以从列表中选择一个或多个选项。我导入 symfony/form
组件来处理后端表单处理。
我正在编写 HTML 用于手动显示表单,因为它显示在 table 中,我不确定如何让 form_widget
助手实现这一点(它是当我只想要一个显示 'as is') 的表单时很好。
每个复选框的代码是(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();
但是,当我提交表单时出现以下错误:
The name "plans[]" contains illegal characters. Names should start with a letter, digit or underscore and only contain letters, digits, numbers, underscores ("_"), hyphens ("-") and colons (":").
我在不使用框架的情况下处理包含名为 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
您应该对一组复选框使用 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')
),
));
尽管进行了多次尝试,但我无法使任何提议的 answers/comments 发挥作用。
最后,我只是为每个复选框添加了一个唯一的名称 ("plans_" + plan.id),而不是尝试创建一个具有相同名称的复选框数组。它不像处理数组那样干净,我不知道为什么这在 Symfony 中如此麻烦,但它有效。
作为 Silex 应用程序的一部分,我有一个带有多个复选框的表单,以便用户可以从列表中选择一个或多个选项。我导入 symfony/form
组件来处理后端表单处理。
我正在编写 HTML 用于手动显示表单,因为它显示在 table 中,我不确定如何让 form_widget
助手实现这一点(它是当我只想要一个显示 'as is') 的表单时很好。
每个复选框的代码是(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();
但是,当我提交表单时出现以下错误:
The name "plans[]" contains illegal characters. Names should start with a letter, digit or underscore and only contain letters, digits, numbers, underscores ("_"), hyphens ("-") and colons (":").
我在不使用框架的情况下处理包含名为 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
您应该对一组复选框使用 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')
),
));
尽管进行了多次尝试,但我无法使任何提议的 answers/comments 发挥作用。
最后,我只是为每个复选框添加了一个唯一的名称 ("plans_" + plan.id),而不是尝试创建一个具有相同名称的复选框数组。它不像处理数组那样干净,我不知道为什么这在 Symfony 中如此麻烦,但它有效。