在symfony2中选择选项

时间:2013-06-15 10:10:12

标签: symfony symfony-2.1 symfony-forms

我花了几个小时找到问题的解决方案,我希望在这里找到答案。

以下是我的表单代码(ExperienceType):

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('intitulePoste')
            ->add('entreprise')
            ->add('dateDebut')
            ->add('dateFin')
            ->add('mission')
            ->add('idContrat', 'entity', array(
                            'class' => 'ClasseBundle:Contrat',
                            'property' => 'contrat',
                           // 'property_path' => false,
                             'multiple' => false,
                             'mapped' => true,
                            'empty_value' => 'Contrat',
                            // 'expanded'=> true,
                             ))
            ->add('idville', 'entity', array(
                            'class' => 'ClasseBundle:Ville',
                            'property' => 'nom',
                           // 'property_path' => false,
                             'multiple' => false,
                             'mapped' => true,
                             'attr' => array(
                                            'class' => 'lesvilles'
                                ), 
                             'empty_value' => 'Ville',

                             ))
        ;
    }

以下是负责在数据库中注册实体的方法:

public function testAction()
    {
        $exp = new Experience();
        $form = $this->createForm(new ExperienceType(), $exp);
        $request = $this->get('request');
        if ($request->getMethod() == 'POST') 
        {
            $form->bind($request);
            if ($form->isValid()) 
            {
                $em = $this->getDoctrine()->getManager();
                $exp = $form->getData();
                $exp->setIdMembre($this->idMembreAction());
                $em->persist($exp);
                $em->flush();
                return $this->redirect($this->generateUrl('test'));
            }
        }

                return $this->render('MembreBundle:Default:FormExp.html.twig', array(
                    'form' => $form->createView()));
    }

当我验证表单时,我收到此错误:" HTTP错误500(内部服务器错误)" 然后使用文件 dev.log 我读了这条消息:

  

doctrine.DEBUG:INSERT INTO Experience(idContrat,idMembre,idVille,   intitulePoste公司,StartDate,EndDate,mission)VALUES {" 1"   (,,,,,,, ????):" [object](project \ \ ClasseBundle \ \ Entity \ \   合同:{})"," 2":1," 3":" [对象](项目\ \ ClasseBundle \   \ Entity \ \ City:{})"," 4"," ggg"," 5":"华夫饼"," 6","   2222/22/22"," 7"," 2222/22/22"," 8":" hjjhjhj"} []

所以我在ExperienceType文件中添加了idVille和idContart字段的条件( required false ) 我在Experience.php文件(实体)中添加了两个字段都接受空值( nullable = true ) 当我验证我的表单时,我的实体存储在数据库中没有问题。 那么问题是什么?感谢

3 个答案:

答案 0 :(得分:1)

您可能以错误的方式映射对象。 我在你看到名为idContrat的表单字段,它建议你尝试存储对象Contract的id属性。这就是你在该对象中需要__toString()方法的原因。

您的映射看起来应该更像:

/**
 * @ORM\ManyToOne("You\SomeBundle\Entity\Contract")
 * @ORM\JoinColumn(name="contract_id", referencedColumnName="id")
 * /
protected $contract;

比:

/**
 * @ORM\Column(name="idContract", type="integer")
 * /
protected $contract_id;

答案 1 :(得分:0)

byf-ferdy's suggestion删除$exp = $form->getData();看起来是正确的。

对于有类似问题的其他人,http://symfony.com/doc/2.1/book/forms.html#forms-and-doctrine有更多相关信息。

答案 2 :(得分:0)

您可以删除行$exp = $form->getData();,因为它将数据作为array而不是对象返回。由于您将$exp变量传递给createForm()方法,因此您的实体会自动映射到您的表单。