使用Symfony表单组件处理具有多个复选框的表单

时间:2017-02-09 14:33:48

标签: php forms symfony silex

作为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

2 个答案:

答案 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中这么麻烦,但它确实有效。