【发布时间】:2017-02-09 14:33:47
【问题描述】:
作为 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();
但是,当我提交表单时,我收到以下错误:
名称“plans[]”包含非法字符。名称应以字母、数字或下划线开头,并且只能包含字母、数字、数字、下划线(“_”)、连字符(“-”)和冒号(“:”)。
在不使用框架的情况下,我在处理带有名为 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
【问题讨论】:
-
我已经更新了使用集合的答案。
-
您要保存这些复选框的目标实体是什么?
-
我不确定您所说的“目标实体”是什么意思。我没有保存复选框,它们用于决定在动态生成的报告中使用哪些文档(计划),因此不需要保存在任何地方。