我必须实体,应用程序和投票。
这个想法是将多对一联系起来。因此,应用程序有很多投票,一个投票是针对一个应用程序。
在我的实体类中,我有这样的设置:
应用程序实体类:
/**
* @ORMOneToMany(targetEntity="Vote", mappedBy="application")
*/
private $votes;
投票实体类:
/**
* @ORMManyToOne(targetEntity="Application", inversedBy="votes")
* @ORMJoinColumn(referencedColumnName="id")
*/
private $application;
我认为这种关系设置得很好还是我弄错了?
接下来是我只有一个字段的表单构建器类:
$builder->add('rate')
->add('save', 'submit');
"投票"实体具有以下字段:(id, username, rate, createdAt, updatedAt, application)
在我的控制器中,我正在做这样的事情:
$vote = new Vote();
$form = $this->createForm(new VoteType(), $vote);
$form->handleRequest($this->getRequest());
if ($form->isValid()) {
$vote->setUserName($tenant->getUsername());
$vote->setApplication($app);
$em->persist($vote);
$em->flush();
$this->get('session')->getFlashBag()->add('success', 'Oceniono aplikację.');
return $this->redirect($this->generateUrl('applications_main'));
}
return array( 'form' => $form->createView(), );
它不起作用,它返回我错误:
ContextErrorException: Warning: json_encode(): recursion detected in E:wampwwwprojectvendorsymfonysymfonysrcSymfonyComponentHttpFoundationJsonResponse.php line 92
堆栈跟踪(纯文本):http://pastebin.com/bSQTDJQY
实体容易出现递归问题,如果你var_dump
或print_r
一个整体,它就会挂起。
能够将实体转换为分层非递归树的最佳序列化工具之一是: https://github.com/schmittjoh/JMSSerializerBundle
它与 FOSRestBundle 一起使用,作为其透明可接受响应处理的一部分。
您遇到了与此类似的问题:避免使用学说实体和 JMS序列化程序递归
查看解决方案,并尝试使用JMSSerializer。
编辑:其他可能的原因:
返回array
时,将返回该数组中包含的表单。您的事件侦听器正在尝试将其序列化为 json,这既是问题的原因,也是相对毫无意义的,除非表单用于提供增强的数据模板。
无论哪种方式,表单都不能如此简单地序列化,您甚至打算这样做吗?