以下是控制器操作中的表单:
$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);
}
}
}
这就是我得到的:
list:ERROR:此值无效
代理:没有错误
名称:无错误
电话:没有错误
电子邮件:没有错误
类型:没有错误
在没有指定data_class的情况下,没有选择字段的示例。这似乎是一项简单的任务,但我无法解决它。为什么验证失败?
答案 0 :(得分:0)
您通过了'choices' => array()
。这意味着,没有选择是有效的。
您的主要问题是创建相同表单的代码不同。您应该使用FormType
并注册它,这样您就可以在任何需要的地方使用带有字符串参数的表单构建器而不是form
。
另一种常见模式是使用相同的控制器操作来显示和处理表单。如果表单中存在某些错误,则无需重定向,此外,在重定向后,您将无法插入在上一页中键入的值。