1

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

    $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();

这是处理 POST 的另一个操作

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 的情况下,根本没有选择字段的示例。这似乎是一个简单的任务,但我无法解决它。为什么验证失败?

4

1 回答 1

0

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

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

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

于 2013-09-06T20:51:25.107 回答