我有一个表单,我要求用户从数据库中已存在的列表中选择一部电影,如果电影不存在,他必须从输入中添加另一个标签。
当我这样做时,我当然有错误:
$formMapper
->add('movie', 'sonata_type_model', array('label'=>'Select a movie', 'query' => $myData))
->add('movie', 'text', array('label'=>'or grasp one', 'required'=>false));
如何更正此错误?
答案 0 :(得分:1)
在您的实体中添加属性,并通过您自己的查询检查添加表单,如:
/* @var $DM \Doctrine\ORM\EntityManager */
$DM = $this->getDoctrine();
$Result = $DM->getRepository('Traffic\ControlBundle\Entity\Movies')->findBy(array('yourfilters' => $yourfilters));
if(count($Result) == 0){
$formbuilder->add('entityPropertyName','text');
}else{
$formbuilder->add('field','entity', array('class' => 'TrafficControlBundle:Movies'));
}
如果电影不存在,请按该属性添加文本字段。
在提交时检查表单是否有效,然后在关系实体中设置该属性值。
见:
$em = $this->getDoctrine()->getManager();
$item->setMovieTitle($this->getRequest()->request->get('movie_name_field'));
$em->persist($item);
$em->flush();
答案 1 :(得分:0)
您只能将一个字段映射到表单(由奏鸣曲管理)并自行管理另一个字段:
$formMapper
->add('movieList', 'sonata_type_model', array('label'=>'Select a movie', 'query' => $myData, 'mapped' => false))
->add('movie', 'text', array('label'=>'or grasp one', 'required'=>false));
然后在您的控制器中您可以选择用户:
$movieList = $form->get('movieList');
然后你可以做任何你想做的事情(创建或更新你的对象作为例子)