Symfony 返回控制器

Symfony 返回控制器,symfony,doctrine-orm,Symfony,Doctrine Orm,我的控制器中有一个方法,它从JMSSerializerBundle中获取一个反序列化的对象,并返回准备持久化的完整对象。我这样做的原因是返回更新的对象,这样,当它被持久化时,它不会将所有内容重置为默认值 运行时,此方法最终在指定的行上抛出一个ErrorException,并将其放入我的日志中:警告:ReflectionProperty::setValue()期望参数1为object,在C:\DevelopmentProjects\keobi web\vendor\doctrine\lib\doc

我的控制器中有一个方法,它从JMSSerializerBundle中获取一个反序列化的对象,并返回准备持久化的完整对象。我这样做的原因是返回更新的对象,这样,当它被持久化时,它不会将所有内容重置为默认值

运行时,此方法最终在指定的行上抛出一个
ErrorException
,并将其放入我的日志中:
警告:ReflectionProperty::setValue()期望参数1为object,在C:\DevelopmentProjects\keobi web\vendor\doctrine\lib\doctrine\ORM\Mapping\ClassMetadata.php第177行(未捕获异常)中给出null在C:\DevelopmentProjects\keobi web\vendor\symfony\src\symfony\Component\HttpKernel\Debug\ErrorHandler.php第65行

由于某种原因,
EntityManager
方法
find
正在返回(根据
get\u class
DefaultController
,此方法的控制器类。
setFieldValue
表示为空

让我困惑的是,如果找不到实体,应该抛出
原则\ORM\EntityNotFoundException
。它没有被扔出去。所以,它显然是在寻找实体,而不是正确地返回它

传入参数
$data
是由JSMSerializerBundle反序列化的对象
$em
绝对是
EntityManager
$metadata
绝对是
ClassMetadata

我在这里不知所措。不知道如何进行

受保护的函数processEntity($data)
{
$em=$this->getDoctrine()->getEntityManager(); $metadata=$em->getClassMetadata(get_class($data)); $fqcn=$metadata->getName(); $blankEntity=新的$fqcn(); $id=array()

$this->get('logger')->debug('Incoming object type:'。get_class($data));35; Keobi\ModelBundle\Entity\User
$this->get('logger')->debug('Blank entity type:')。get_class($blankEntity));35;Keobi\ModelBundle\entity\User
$this->get('logger')->debug('FQCN:'.$FQCN);#Keobi\ModelBundle\Entity\User
foreach($metadata->getIdentifierFieldNames()作为$identifier)
{
$id[$identifier]=$metadata->getFieldValue($data,$identifier);
if(!$id[$identifier])
{
$this->get('logger')->debug(sprintf(“缺少标识符'%s'。假设对象是新的。”,$identifier));
返回$data;
}
}
$entity=$em->find($metadata->getName(),$id);
$this->get('logger')->debug(get_class($entity));35;Keobi\RestAPIBundle\DefaultController
foreach($metadata->getFieldNames()作为$field)
{
$value=$metadata->getFieldValue($data,$field);
$default=$metadata->getFieldValue($blankEntity,$field);
如果($value$default)
{
$metadata->setFieldValue($entity,$field,$value);#获取('logger')->调试(sprintf(“更新了%s中的字段'%s',$field,获取类($entity));
}
}
返回$entity;
}

您需要指定搜索的存储库,如:

$entity = $em->getRepository('EntitiesBundle:Entity')->find(...)
您需要指定搜索的存储库,如:

$entity = $em->getRepository('EntitiesBundle:Entity')->find(...)

看来这是一个与教义2有关的问题。我将其更新为最新的负责人提交。让我困惑的是,这种方法其实在不久前就奏效了


找不到解决此问题的确切提交,但在撰写本文时,提交是

看来这是一个与Doctrine2有关的问题。我将其更新为最新的负责人提交。让我困惑的是,这种方法其实在不久前就奏效了

找不到解决此问题的确切提交,但在撰写本文时,提交是

$em->find()
实际上是
$em->getRepository($entity)->find()的快捷方式。我希望事情能这么简单。我试过两种方法。
$em->find()
实际上是
$em->getRepository($entity)->find()的快捷方式。我希望事情能这么简单。我试过两种方法。
$entity = $em->getRepository('EntitiesBundle:Entity')->find(...)