Symfony 2表单选择字段在POST上验证失败(无数据类)


Symfony 2 form choice field fails validation on POST (no data class)

这是控制器操作中的表单:

    $form = $this->get('form.factory')->createNamedBuilder('meetings_form', 'form', $defaults)
        ->add('list','choice',array(
            'choices' => array('1'=>'val1','2'=>'val2'),
            'required' => false
        ))
        ->add('agency','text')
        ->add('name','text')
        ->add('phone','text')
        ->add('email','email')
        ->add('type','hidden')
        ->getForm();

这是处理开机自检的另一个操作

public function wsFormPostAction(Request $request)
{
    if ('POST' == $request->getMethod()) {
        $form = $this->get('form.factory')->createNamedBuilder('meetings_form', 'form')
            ->add('list', 'choice',array(
                'choices' => array()
            ))
            ->add('agency', 'text')
            ->add('name', 'text')
            ->add('phone', 'text')
            ->add('email', 'email')
            ->add('type', 'hidden')
            ->getForm();
        $form->bind($request);
        if ($form->isValid()) {
            $data = $form->getData();
        } else {
            $errors = $form->getErrorsAsString();
            var_dump($errors);
        }
    }
}

这是我得到的:

列表:错误:此值无效
代理机构:没有错误
名称:无错误
电话:没有错误
电子邮件:无错误
类型:无错误

没有指定data_class的选项字段的示例。 这似乎是一个简单的任务,但我无法解决它。为什么验证失败?

你通过'choices' => array() .这意味着,没有任何选择是有效的。

您的主要问题是创建相同表单的代码不同。您应该使用FormType并注册它,这样您就可以将表单构建器与字符串参数一起使用,而不是在您需要它的任何地方使用form

另一种常见模式是使用相同的控制器操作来显示和处理表单。如果表单中有一些错误,则无需重定向,此外,重定向后您将无法插入在上一页中键入的值。