formMapper:表单中的两次字段

时间:2014-12-17 13:14:39

标签: symfony sonata-admin

我有一个表单,我要求用户从数据库中已存在的列表中选择一部电影,如果电影不存在,他必须从输入中添加另一个标签。

当我这样做时,我当然有错误:

    $formMapper

->add('movie', 'sonata_type_model', array('label'=>'Select a movie', 'query' => $myData))

->add('movie', 'text', array('label'=>'or grasp one', 'required'=>false));

如何更正此错误?

2 个答案:

答案 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');

然后你可以做任何你想做的事情(创建或更新你的对象作为例子)