如何使复选框在Symfony 2中工作?



我目前正在创建一个表单,允许用户从下拉菜单和爱好复选框中选择特定技能,让用户可以检查他/她想要的尽可能多的内容。

这是我的表格:CurriculumVitae

/* namespace ........... */
use DoctrineORMMapping as ORM;
/**
* CurriculumVitae
*
* @ORMTable(name="foo_cv")
* @ORMEntity
*/
class CurriculumVitae
{
/**
* @var integer
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var integer
* @ORMManyToOne(targetEntity="FooBarBundleEntitySkills")
* @ORMJoinColumn(name="skills", referencedColumnName="id")
*/
private $skills;
/**
* @var integer
* @ORMManyToOne(targetEntity="FooBarBundleEntityHobby", cascade={"persist"})
* @ORMJoinColumn(name="hobbies", referencedColumnName="id")
*/
private $hobby;
/*  Setters and Getters   .......  */
}

以下是我的表单类型的一些代码:CurriculumVitaeType

/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('skills', 'entity', array('class' =>'FooBarBundle:Skills','property' => 'skills'))
->add('hobby', 'entity', array( 'class' => 'FooBarBundle:Hobby','property' => 'hobbies', 'expanded'=>true,'multiple'=>true, 'label' => 'hobbies'))
->add('save','submit',array('label'=>'Submit'))
;
}
/* OptionsResolverInterface  .....   */
/* getName()  .... */

我这样称呼我的树枝形式:cv.twig.html

{{ form(curriculumForm) }} 

最后在我的控制器中:课程控制器

$em = $this->getDoctrine()->getManager();
$cv = new CurriculumVitae();
$curriculumForm = $this->createForm(new CurriculumVitaeType(), $cv);
$curriculumForm->handleRequest($request);
if ($curriculumForm->isValid()) {
$em->persist($cv);
$em->flush();
return $this->redirect($this->generateUrl('foo_main_window'));
}
return array('curriculumForm'=> $curriculumForm->createView());

表单显示正确,但是当我从下拉列表中选择技能并分配某种爱好并单击提交时,会抛出错误。

在关联上找到类型为 Doctrine\Common\Collections\ArrayCollection 的实体 Foo\BarBundle\Entity\CoursericulumVitae#hobby,但期望 Foo\BarBundle\Entity\Hobby

我不知道我是否错过了什么,但我认为错误发生在提交表单后保留数据的过程中。

那是因为你有多对一的关系,这意味着

许多CurriculumVitae可以有(相同的)单个Hobby

但另一方面,您在表单中创建了一个带有选项'multiple'=>true的字段,这意味着您可以让用户选择多种爱好。因此,表单返回HobbyArrayCollection,而不是单个实例。

这不符。您需要删除multiple选项,或者$hobby属性建立多对多关系。

相关内容

  • 没有找到相关文章