在symfony2中选择选项

在symfony2中选择选项,symfony,symfony-2.1,symfony-forms,Symfony,Symfony 2.1,Symfony Forms,我花了几个小时来寻找解决问题的方法,我希望在这里找到答案 以下是我的表格代码(ExperienceType): 下面是负责在数据库中注册实体的方法: public function testAction() { $exp = new Experience(); $form = $this->createForm(new ExperienceType(), $exp); $request = $this->get('request

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

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

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

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我阅读了以下消息:

条令调试:插入到经验中(idcontart、idMembre、idVille、, intitulePoste公司,开始日期,结束日期,任务)价值观{“1” (,,,,,,??):“[对象](项目\\ClasseBundle\\Entity\\ 合同:{}>,“2”:1,“3”:“[object](项目\\ClasseBundle\ \实体\\城市:{}>,“4”,“ggg”,“5”:“华夫格”,“6”,“6” 2222/22/22”、“7”、“2222/22/22”、“8”:“HJHJ”}[]

因此,我在ExperienceType文件中添加了idVille和idContart字段的条件(必选false) 我在Experience.php文件(entity)中添加了两个字段都接受空值​​(nullable=true) 当我验证我的表单时,我的实体将毫无问题地存储在数据库中。 那有什么问题?感谢您删除
$exp=$form->getData()看起来正确

对于其他具有类似问题的用户,请参阅有关此问题的详细信息。

删除
$exp=$form->getData()看起来正确


对于其他有类似问题的用户,我们将提供更多信息。

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

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

您可能以错误的方式映射了对象。 我在表单中看到名为
idcontract
的字段,建议您尝试存储对象
合同的id属性。这就是为什么您需要在该对象中使用
\uu toString()
方法的原因

映射应该更像这样:

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


您可能以错误的方式映射了对象。 我在表单中看到名为
idcontract
的字段,建议您尝试存储对象
合同的id属性。这就是为什么您需要在该对象中使用
\uu toString()
方法的原因

映射应该更像这样:

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


您不需要行
$exp=$form->getData()
$exp
已与表单映射,因此包含所有数据。尽量把那句话删掉。尝试调用
dev
evnoirement中的请求以查看更详细的错误消息。非常感谢,问题是
类无法转换为C:\wamp\www\Symfony\vendor\doctrine dbal\lib\doctrine\dbal\Statement.php中的字符串,解决方案是必须添加方法\uu toString。谢谢:欢迎光临。要我把这个作为答案吗?@byf ferdy是的,你可以你不需要这行
$exp=$form->getData()
$exp
已与表单映射,因此包含所有数据。尽量把那句话删掉。尝试调用
dev
evnoirement中的请求以查看更详细的错误消息。非常感谢,问题是
类无法转换为C:\wamp\www\Symfony\vendor\doctrine dbal\lib\doctrine\dbal\Statement.php中的字符串,解决方案是必须添加方法\uu toString。谢谢:欢迎光临。想让我补充一下吗?@byf ferdy是的,你可以。事实并非如此。表单总是返回绑定的内容-如果绑定了数组,它将返回数组;如果绑定了对象,则返回对象@2dar并没有在添加到string方法的地方编写代码,但可能在object
Contract
上不是这样。表单总是返回绑定的内容-如果绑定了数组,它将返回数组;如果绑定了对象,则返回对象@2dar并没有在添加到string方法的地方编写代码,但可能是在object
Contract
/**
 * @ORM\Column(name="idContract", type="integer")
 * /
protected $contract_id;