我在控制器中创建了一个表单:
public function uploadAction(Request $request)
{
$user= new User();
$form = $this->createFormBuilder($user)
->setAction($this->generateUrl('app_create_user'))
->add('name','text',array('label'=>'Your Name','required' => false))
->add('idcountry', 'entity', array(
'mapped' => false,
'class' => 'GedBundle:Country',
'property' => 'country_name',
'label' => 'Your Country',
))
->add('file')
->getForm()
;
if ($request->isMethod('POST')) {
$form->bind($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($user);
$em->flush();
return $this->redirect($this->generateUrl('app_homepage'));
}
}
return $this->render('GedBundle:Default:form.html.twig',array(
'form' => $form->createView(),
));
}
我的观点是:
<form action=" {{ path('app_create_user') }} " method="post" {{ form_enctype(form) }}>
{{ form_widget(form) }}
<input type="submit" value="Create" />
</form>
一切都工作得很好,但唯一的问题是,当我提交的形式的值idcountry发送为空,我得到这个错误"字段'idcountry'不能为空"。有什么问题吗?
从idcountry
中删除mapped = false
配置设置,因为这意味着该属性将作为单独的数组元素从$form->getData()
中可用,而不是您的用户实体的一部分。
顺便问一下,你用的是哪个版本的symfony ?因为在2.3以上,建议这样使用:
$form->handleRequest($request);
if ($form->isValid()) {
//YOUR CODE
}