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